//------------------------------------------------------------------------------ // IPS Global JS functions //------------------------------------------------------------------------------ // Matt Mecham Woz Here // (c) 2005 Invision Power Services, Inc. // http://www.invisionpower.com //------------------------------------------------------------------------------ function ipsclass() { this.cookies = new Array(); this.ignore_cookies = new Array( ipb_var_cookieid + 'ipb_stronghold', ipb_var_cookieid + 'session_id', ipb_var_cookieid + 'ipb_admin_session_id', ipb_var_cookieid + 'member_id', ipb_var_cookieid + 'pass_hash' ); this.settings = { 'do_linked_resize' : 0, 'resize_percent' : 50 }; /*-------------------------------------------------------------------------*/ // Sort out cookies /*-------------------------------------------------------------------------*/ this.init = function() { var _tmp = document.cookie.split(';'); if ( _tmp.length ) { for( i = 0 ; i < _tmp.length ; i++ ) { if ( _tmp[i].match( new RegExp( ipb_var_cookieid + ".*$" ) ) ) { var _data = _tmp[i].split('='); var _key = this.trim( _data[0] ); var _value = unescape( this.trim( _data[1] ) ); if ( _key && ( ! this.in_array( _key, this.ignore_cookies ) ) ) { this.cookies[ _key.replace( ipb_var_cookieid, '' ) ] = _value; } } } } _tmp = null; }; //============================================================================= // PHP EMULATION //============================================================================= /** * Emulate PHPs trim function */ this.trim = function( text ) { if( typeof(text) == 'undefined' ) { return ''; } text = text.replace(/^\s+/, ''); return text.replace(/\s+$/, ''); }; /** * Emulate PHPs html_entity_decode function */ this.html_entity_decode = function( text ) { if( typeof ca == 'undefined' ) { var ca = document.createElement( 'textarea' ); } ca.innerHTML = text.replace( //g, '>' ); return ca.value; }; /** * Emulate PHPs in_array function */ this.in_array = function( needle, haystack ) { if ( ! haystack.length ) { return false; } for ( var i = 0 ; i < haystack.length ; i++) { if ( haystack[i] === needle ) { return true; } } return false; }; /** * Emulate PHPs htmlspecial chars function */ this.htmlspecialchars = function( text ) { text = text.replace( //g, '>' ); text = text.replace( /"/g, '"' ); return text; }; /** * Emulate PHPs un htmlspecial chars function */ this.un_htmlspecialchars = function( text ) { text = text.replace( /</g , '<' ); text = text.replace( />/g , '>' ); text = text.replace( /"/g, '"' ); return text; }; //============================================================================= // EDITOR FUNCTIONS //============================================================================= /** * Get contents from an open editor */ this.get_editor_contents = function( editor_id, editor_array ) { var aIPS_editor = editor_array ? editor_array : IPS_editor; if ( ! editor_id ) { //----------------------------------------- // Assume we don't care, and get first box //----------------------------------------- for( var i in aIPS_editor ) { if( typeof( aIPS_editor[i] ) != 'object' ) { continue; } editor_id = i; break; } } return aIPS_editor[ editor_id ].editor_get_contents; }; /** * Add contents to an open editor */ this.add_editor_contents = function( text, editor_id, editor_array ) { var aIPS_editor = editor_array ? editor_array : IPS_editor; if ( ! editor_id ) { //----------------------------------------- // Assume we don't care, and get first box //----------------------------------------- for( var i in aIPS_editor ) { if( typeof( aIPS_editor[i] ) != 'object' ) { continue; } editor_id = i; break; } } return aIPS_editor[ editor_id ].insert_text( text ); }; /** * Convert saved tags to display tags */ this.convert_saved_tags_to_display_tags = function( text ) { text = text.replace( /(<|<|<)!--/, "{" ); text = text.replace( /--(>|>|>)/ , "}" ); return text; }; //============================================================================= // MISC FUNCTIONS //============================================================================= /** * Include a script... */ this.include_javascript = function( _file, div_id ) { /* INIT */ var _doc = ( div_id ) ? document.getElementById( div_id ) : document.getElementsByTagName( 'head' ).item(0); var _js = document.createElement('script' ); /* Create attribute */ _js.setAttribute( 'language', 'javascript' ); _js.setAttribute( 'type', 'text/javascript' ); _js.setAttribute( 'src', _file ); _doc.appendChild( _js ); return false; }; /** * Fade in colour... */ this.fade_in_element = function( div ) { //----------------------------------------- // INIT //----------------------------------------- var hash = '#'; var color_items = "0123456789abcdef"; var start_color = '#ffff66'; var orig_color = document.getElementById( div ).style.backgroundColor; var temp_end = '#ffffff'; var iter = 20; var time = 80; var rbeg = color_items.indexOf(start_color.substr(1,1))*16 + color_items.indexOf(start_color.substr(2,1)); var gbeg = color_items.indexOf(start_color.substr(3,1))*16 + color_items.indexOf(start_color.substr(4,1)); var bbeg = color_items.indexOf(start_color.substr(5,1))*16 + color_items.indexOf(start_color.substr(6,1)); var rend = color_items.indexOf(temp_end.substr(1,1))*16 + color_items.indexOf(temp_end.substr(2,1)); var gend = color_items.indexOf(temp_end.substr(3,1))*16 + color_items.indexOf(temp_end.substr(4,1)); var bend = color_items.indexOf(temp_end.substr(5,1))*16 + color_items.indexOf(temp_end.substr(6,1)); for ( i = 1, r = rbeg, g = gbeg, b = bbeg; i <= iter; r = Math.round(rbeg + i * ((rend - rbeg) / (iter-1))), g = Math.round(gbeg + i * ((gend - gbeg) / (iter-1))), b = Math.round(bbeg + i * ((bend - bbeg) / (iter-1))), i++ ) { hstr = '#' + color_items.charAt(Math.floor(r/16)) + color_items.charAt(r%16) + color_items.charAt(Math.floor(g/16)) + color_items.charAt(g%16) + color_items.charAt(Math.floor(b/16)) + color_items.charAt(b%16); setTimeout('var div = document.getElementById("' + div + '"); div.style.backgroundColor = "' + hstr + '";', i * time); } setTimeout('var div = document.getElementById("' + div + '"); div.style.backgroundColor = "' + orig_color + '";', (i+1) * time); }; /** * Accepts a string followed by a list of replacements */ this.lang_build_string = function() { if ( ! arguments.length || ! arguments ) { return; } var string = arguments[0]; for( var i = 1 ; i < arguments.length ; i++ ) { var match = new RegExp('<%' + i + '>', 'gi'); string = string.replace( match, arguments[i] ); } return string; }; /** * Return the ID from an ID title string * * @param string ID title * @return integar ID */ this.get_id_from_text = function( id ) { return id.replace( /.*(\-|_)(\S+)/, "$2" ); }; /** * Return the name from an ID string * * @param string ID title * @return integar ID */ this.get_name_from_text = function( id ) { return id.replace( /(.*)(\-|_)(\S+)/, "$1" ); }; /** * Location jump * @param string URL to redirect to * @param boolean Do not prepend normal URL */ this.location_jump = function( url, full ) { url = url.replace( /&/g, '&' ); if ( full ) { window.location.href = url; } else { window.location.href = ipb_var_base_url + url; } }; /** * Confirm an action */ this.confirm_action = function(url, msg) { if ( ! msg ) { msg = 'PLEASE CONFIRM:\nOK to proceed?'; } if ( url ) { url = url.replace( '&', '&' ); } else { url = ''; } if ( confirm( msg ) ) { window.location.href = url; } else { alert ( ipb_global_lang['action_cancelled'] ); return false; } }; /** * Create pop-up window */ this.pop_up_window = function(url, width, height, name) { if ( ! name ) { var mydate = new Date(); name = mydate.getTime(); } var Win = window.open( url.replace( '&', '&' ), name, 'width='+width+',height='+height + ',resizable=1,scrollbars=1,location=no,directories=no,status=no,menubar=no,toolbar=no'); Win.focus(); return false; }; /** * Set stuff unselectable */ this.set_unselectable = function(obj) { if ( ! is_ie4 && typeof( obj.tagName ) != 'undefined' ) { if ( obj.hasChildNodes() ) { for (var i = 0; i < obj.childNodes.length; i++) { this.set_unselectable( obj.childNodes[i] ); } } obj.unselectable = 'on'; } }; /** * GET LEFT OBJECT POSITION * Safari friendly version... */ this.get_obj_leftpos = function(obj) { var curleft = 0; if (obj.offsetParent) { while (obj.offsetParent) { curleft += obj.offsetLeft; obj = obj.offsetParent; } } else if (obj.x) { curleft += obj.x; } return curleft; }; /** * GET TOP OBJECT POSITION * Safari friendly version... */ this.get_obj_toppos = function(obj) { var curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop; obj = obj.offsetParent; } } else if (obj.y) { curtop += obj.y; } return curtop; }; //============================================================================= // CANCEL BUBBLE FUNCTIONS //============================================================================= /** * Stop the browser bubbling events */ this.cancel_bubble = function(obj, extra) { if ( extra !== false ) { extra = true; } if ( ! obj || is_ie) { if ( extra ) { window.event.returnValue = false; } window.event.cancelBubble = true; return window.event; } else { obj.stopPropagation(); if ( extra ) { obj.preventDefault(); } return obj; } }; this.cancel_bubble_all = function( obj ) { return ipsclass.cancel_bubble( obj, true ); }; this.cancel_bubble_low = function( obj ) { return ipsclass.cancel_bubble( obj, false ); }; //============================================================================= // COOKIE FUNCTIONS //============================================================================= /** * Cookie: Get Cookie */ this.my_getcookie = function( name ) { return this.cookies[ name ]; /*cname = ipb_var_cookieid + name + '='; cpos = document.cookie.indexOf( cname ); if ( cpos != -1 ) { cstart = cpos + cname.length; cend = document.cookie.indexOf(";", cstart); if (cend == -1) { cend = document.cookie.length; } return unescape( document.cookie.substring(cstart, cend) ); } return null;*/ }; /** * Cookie: Set Cookie */ this.my_setcookie = function( name, value, sticky ) { expire = ""; domain = ""; path = "/"; if ( sticky ) { expire = "; expires=Wed, 1 Jan 2020 00:00:00 GMT"; } if ( ipb_var_cookie_domain != "" ) { domain = '; domain=' + ipb_var_cookie_domain; } if ( ipb_var_cookie_path != "" ) { path = ipb_var_cookie_path; } document.cookie = ipb_var_cookieid + name + "=" + value + "; path=" + path + expire + domain + ';'; //----------------------------------------- // Update internal array //----------------------------------------- this.cookies[ name ] = value; }; //============================================================================= // ARRAY FUNCTIONS //============================================================================= /** * Array: Get stacksize * @param array Array * @return int Array length */ this.array_stacksize = function( thearray ) { for (i = 0 ; i < thearray.length; i++ ) { if ( (thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined') ) { return i; } } return thearray.length; }; /** * Array: Add element to the stack * @param array Array * @param mixed New value */ this.array_pushstack = function ( thearray, newval ) { var arraysize = this.array_stacksize(thearray); thearray[arraysize] = newval; }; /** * Array: Remove last array element * @param array Array * @return int Array length */ this.array_popstack = function( thearray ) { var arraysize = this.array_stacksize( thearray ); var theval = thearray[arraysize - 1]; delete thearray[arraysize - 1]; return theval; }; }