//------------------------------------------ // Invision Power Board v2.1 // Topics JS File // (c) 2005 Invision Power Services, Inc. // // http://www.invisionboard.com //------------------------------------------ var mystored_selection = ''; var post_cache = new Array(); var ajax_loaded = 1; var ignore_cache = new Array(); var rate_value = 0; /*--------------------------------------------*/ // Add onload event /*--------------------------------------------*/ add_onload_event( fix_linked_image_sizes ); /*--------------------------------------------*/ // Fix linked images (attach thumbs) /*--------------------------------------------*/ function fix_linked_image_sizes_attach_thumb( attach_id, width, height, file_size ) { //----------------------------------------- // INIT //----------------------------------------- var _img = ''; var img_obj = document.getElementById( 'ipb-attach-img-' + attach_id ); var div_obj = document.getElementById( 'ipb-attach-div-' + attach_id ); var ct_obj = document.getElementById( 'ipb-attach-ct-' + attach_id ); var cb_obj = document.getElementById( 'ipb-attach-cb-' + attach_id ); var url_obj = document.getElementById( 'ipb-attach-url-' + attach_id ); var tbl_obj = document.getElementById( 'ipb-attach-table-' + attach_id ); var _width = parseInt( img_obj.width ) ? parseInt( img_obj.width ) : parseInt( img_obj.style.width ); var _height = parseInt( img_obj.height ) ? parseInt( img_obj.height ) : parseInt( img_obj.style.height ); var _padding = 5; var _percent = 0; if ( is_ie ) { //----------------------------------------- // Well done MS.. more bugs and workarounds //----------------------------------------- _width = parseInt( img_obj.currentStyle['width'] ); _height = parseInt( img_obj.currentStyle['height'] ); } if ( is_safari ) { //----------------------------------------- // Nice. Safari you suck! I hate you! // You're the black sheep of the apple family! //----------------------------------------- tbl_obj.style.display = 'inline-block'; } //----------------------------------------- // Got width / height? //----------------------------------------- if ( width && height ) { _percent = Math.ceil( 100 - parseInt( _width / width * 100 ) ); } //----------------------------------------- // Stylize //----------------------------------------- // Remove IMG class to stop gray border img_obj.className = 'ipb'; img_obj.title = ipb_global_lang['click_to_view']; img_obj.onmouseover = fix_attach_images_mouseover; img_obj.onclick = function(event) { ipsclass.pop_up_window( url_obj.href, width + 20, height + 20 ); ipsclass.cancel_bubble(event); }; // Re-style the main div obj div_obj.style.width = ( _width > 140 ? _width : 140 ) + 'px'; div_obj.style.height = _height + ( _padding * 2 ) + 28 + 'px'; div_obj.className = 'resized-linked-image'; div_obj.style.paddingTop = _padding + "px"; div_obj.style.paddingBottom = _padding + "px"; div_obj.style.paddingLeft = _padding + 3 + "px"; div_obj.style.paddingRight = _padding + 3 + "px"; div_obj.style.textAlign = 'center'; div_obj.title = ipb_global_lang['click_to_view']; //div_obj.onmouseover = fix_linked_images_mouseover; //div_obj.onclick = function(event) { ipsclass.pop_up_window( url_obj.href, width + 20, height + 20 ); ipsclass.cancel_bubble(event); }; // Add content to the top div ct_obj.style.fontSize = '9px'; cb_obj.style.fontSize = '9px'; cb_obj.style.textAlign = 'center'; if ( _percent > 0 ) { ct_obj.innerHTML = _img + ' ' + ipsclass.lang_build_string( ipb_global_lang['image_attach_percent'], _percent ); } else { ct_obj.innerHTML = _img + ' ' + ipb_global_lang['image_attach_no_percent']; } cb_obj.innerHTML = ""; if ( width && height ) { cb_obj.innerHTML = ipsclass.lang_build_string( ipb_global_lang['image_attach_dims'], width, height ); } cb_obj.innerHTML += ipsclass.lang_build_string( ipb_global_lang['image_attach_size'], file_size ); } /*--------------------------------------------*/ // Fix linked images (normal IMGs) /*--------------------------------------------*/ function fix_linked_image_sizes() { if ( ipsclass.settings['do_linked_resize'] != 1 ) { return true; } var images = document.getElementsByTagName( 'IMG' ); var _padding = 2; var _count = 0; var _img = ''; var _img2 = ''; var _sw = screen.width * ( parseInt( ipsclass.settings['resize_percent'] ) / 100 ); for ( var i = 0 ; i < images.length; i++ ) { if ( images[i].className == 'linked-image' ) { //----------------------------------------- // Inc. counter //----------------------------------------- _count++; //----------------------------------------- // Set up basics... //----------------------------------------- if ( images[i].width > _sw ) { //----------------------------------------- // Grab some details... //----------------------------------------- var _width = images[i].width; var _height = images[i].height; var _percent = 0; //----------------------------------------- // Work out percentage //----------------------------------------- images[i].width = _sw; if ( images[i].width < _width && _width > 0 && images[i].width > 0 ) { _percent = Math.ceil( parseInt( images[i].width / _width * 100 ) ); } images[i].id = '--ipb-img-resizer-' + _count; images[i]._resized = 1; images[i]._width = _width; //----------------------------------------- // Add in wrapper //----------------------------------------- var div = document.createElement( 'div' ); div.innerHTML = _img + ' ' + ipsclass.lang_build_string( ipb_global_lang['image_resized'], _percent, _width, _height ); div.style.width = images[i].width - ( _padding * 2 ) + 'px'; div.className = 'resized-linked-image'; div.style.paddingTop = _padding + "px"; div.style.paddingBottom = _padding + "px"; div.style.paddingLeft = _padding + "px"; div.style.paddingRight = _padding + "px"; div._is_div = 1; div._resize_id = _count; div.onclick = fix_linked_images_onclick; div.onmouseover = fix_linked_images_mouseover; div.title = ipb_global_lang['click_to_view' ]; div._src = images[i].src; //----------------------------------------- // Add it all... //----------------------------------------- //if ( is_ie && ! is_ie7 ) //{ // images[i].outerHTML = div.outerHTML + images[i].outerHTML; //} //else //{ images[i].parentNode.insertBefore( div, images[i] ); //} } } } } function fix_linked_images_onclick(e) { //----------------------------------------- // Div clicked //----------------------------------------- PopUp( this._src, 'popup',screen.width,screen.height,1,1,1); e = ipsclass.cancel_bubble_all( e ); return false; }; function fix_attach_images_mouseover(e) { //----------------------------------------- // Change cursor... //----------------------------------------- try { this.style.cursor='pointer'; } catch(acold) { } } function fix_linked_images_mouseover(e) { try { this.style.cursor='pointer'; } catch(acold) { } } /*--------------------------------------------*/ // Fast reply stuff /*--------------------------------------------*/ function emoticon( ecode, eobj, eurl ) { ecode = ' ' + ecode + ' '; var obj_ta = document.getElementById( 'fastreplyarea' ); if ( (ua_vers >= 4) && is_ie && is_win) { if (obj_ta.isTextEdit) { obj_ta.focus(); var sel = document.selection; var rng = sel.createRange(); rng.colapse; if((sel.type == "Text" || sel.type == "None") && rng != null) { if(ecode != "" && rng.text.length > 0) ecode = rng.text + ecode ; rng.text = ecode; } } else { obj_ta.value += ecode; } } //---------------------------------------- // It's MOZZY! //---------------------------------------- else if ( obj_ta.selectionEnd ) { var ss = obj_ta.selectionStart; var st = obj_ta.scrollTop; var es = obj_ta.selectionEnd; if (es <= 2) { es = obj_ta.textLength; } var start = (obj_ta.value).substring(0, ss); var middle = (obj_ta.value).substring(ss, es); var end = (obj_ta.value).substring(es, obj_ta.textLength); //----------------------------------- // text range? //----------------------------------- if (obj_ta.selectionEnd - obj_ta.selectionStart > 0) { middle = ecode + middle; } else { middle = ecode + middle; } obj_ta.value = start + middle + end; var cpos = ss + (middle.length); obj_ta.selectionStart = cpos; obj_ta.selectionEnd = cpos; obj_ta.scrollTop = st; } //---------------------------------------- // It's CRAPPY! //---------------------------------------- else { obj_ta.value += ecode; } obj_ta.focus(); if ( (ua_vers >= 4) && is_ie && is_win && emowindow != 'undefined' ) { emowindow.focus(); } //document.getElementById( 'fastreplyarea' ).value += ' ' + ecode + ' '; } /*--------------------------------------------*/ // Topic: Scroll to post: IE fix /*--------------------------------------------*/ function topic_scroll_to_post( post_id ) { //---------------------------------- // Check for PID //---------------------------------- if ( ! post_id ) { return false; } try { var post_main_obj = document.getElementById( 'post-main-' + post_id ); } catch(error) { var post_main_obj; } if ( post_main_obj ) { var post_box_top = _get_obj_toppos( post_main_obj ); if ( post_box_top ) { scroll( 0, post_box_top - 30 ); } } } /*--------------------------------------------*/ // Show hidden post /*--------------------------------------------*/ function topic_show_ignored_post( pid ) { try { // Set up var post_main = document.getElementById( 'post-main-' + pid ); var post_ignore = document.getElementById( 'post-ignore-' + pid ); // Show it post_main.innerHTML = ignore_cache[ pid ]; } catch( e ) { //alert( e ); } return false; } /*--------------------------------------------*/ // Initiate topic hide /*--------------------------------------------*/ function topic_init_ignored_post( pid ) { try { // Set up var post_main = document.getElementById( 'post-main-' + pid ); var post_ignore = document.getElementById( 'post-ignore-' + pid ); // Cache it... ignore_cache[ pid ] = post_main.innerHTML; // Display "ignored" msg post_main.innerHTML = post_ignore.innerHTML; } catch( e ) { //alert( e ); } } /*--------------------------------------------*/ // Ajax: Use full editor /*--------------------------------------------*/ function ajax_fulleditor_for_edit( post_id ) { if ( post_id && ipb_input_t && ipb_input_f ) { var _form = document.getElementById( 'quick-edit-form-' + post_id ); var _url = ipb_var_base_url + 'act=post&do=edit_post&f=' + ipb_input_f + '&t=' + ipb_input_t + '&p=' + post_id + '&st=' + ipb_var_st + '&_from=quickedit'; _form.action = _url; _form.method = 'POST'; _form.submit(); xmlobj.show_loading(); return false; } else { return false; } } /*--------------------------------------------*/ // Ajax: Cancel for edit /*--------------------------------------------*/ function ajax_cancel_for_edit( post_id ) { if ( post_cache[ post_id ] != "" ) { document.getElementById( 'post-'+post_id ).innerHTML = post_cache[ post_id ]; } return false; } /*--------------------------------------------*/ // Ajax: Save for edit /*--------------------------------------------*/ function ajax_save_for_edit( post_id ) { //---------------------------------- // INIT //---------------------------------- var url = ipb_var_base_url+'act=xmlout&do=post-edit-save&p='+post_id+'&t='+ipb_input_t+'&f='+ipb_input_f; var fields = new Array(); //---------------------------------- // Populate fields //---------------------------------- fields['md5check'] = ipb_md5_check; fields['t'] = ipb_input_t; fields['f'] = ipb_input_f; fields['p'] = post_id; fields['act'] = 'xmlout'; fields['do'] = 'post-edit-save'; fields['Post'] = document.getElementById( post_id + '_textarea' ).value; fields['std_used'] = 1; // Make sure STD BBCode parser is used //----------------------------------------- // Got a reason to be jolly? //----------------------------------------- try { fields['post_edit_reason'] = document.getElementById( 'post_edit_reason' ).value; } catch(err) { } //---------------------------------- // Is there a post? //---------------------------------- var post_check = fields['Post']; if ( post_check.replace( /^\s*|\s*$/g, "" ) == "" ) { alert( js_no_empty_post ); return false; } /*--------------------------------------------*/ // Main function to do on request // Must be defined first!! /*--------------------------------------------*/ do_request_function = function() { //---------------------------------- // Ignore unless we're ready to go //---------------------------------- if ( ! xmlobj.readystate_ready_and_ok() ) { xmlobj.show_loading(); return; } xmlobj.hide_loading(); //---------------------------------- // INIT //---------------------------------- var html = xmlobj.xmlhandler.responseText; //----------------------------------------- // Execute JS... //----------------------------------------- if ( html == 'nopermission' ) { alert( js_error_no_permission ); document.getElementById( 'post-'+post_id ).innerHTML = post_cache[ post_id ]; } else if ( html != 'error' ) { document.getElementById( 'post-'+post_id ).innerHTML = html; xmlobj.execute_javascript( html ); fix_linked_image_sizes(); } }; //---------------------------------- // LOAD XML //---------------------------------- xmlobj = new ajax_request(); xmlobj.onreadystatechange( do_request_function ); var xmlreturn = xmlobj.process( url, 'POST', xmlobj.format_for_post(fields) ); return false; } /*--------------------------------------------*/ // Ajax: Prep for edit /*--------------------------------------------*/ function ajax_prep_for_edit( post_id, event ) { //---------------------------------- // Cancel bubble (Prevent IE scroll...) //---------------------------------- global_cancel_bubble( event, true ); var post_main_obj = document.getElementById( 'post-main-' + post_id ); var post_box_top = _get_obj_toppos( post_main_obj ); //---------------------------------- // INIT //---------------------------------- var url = ipb_var_base_url+'act=xmlout&do=post-edit-show&p='+post_id+'&t='+ipb_input_t+'&f='+ipb_input_f; post_cache[ post_id ] = document.getElementById( 'post-'+post_id ).innerHTML; //---------------------------------- // Attempt to close open menus //---------------------------------- try { menu_action_close(); } catch(e) { //alert( e ); } /*--------------------------------------------*/ // Main function to do on request // Must be defined first!! /*--------------------------------------------*/ do_request_function = function() { //---------------------------------- // Ignore unless we're ready to go //---------------------------------- if ( ! xmlobj.readystate_ready_and_ok() ) { xmlobj.show_loading(); return; } xmlobj.hide_loading(); //---------------------------------- // INIT //---------------------------------- var html = xmlobj.xmlhandler.responseText; if ( html == 'nopermission' ) { alert( js_error_no_permission ); } else if ( html != 'error' ) { if ( post_box_top ) { scroll( 0, post_box_top - 30 ); } document.getElementById( 'post-' + post_id ).innerHTML = html; //----------------------------------------- // Set up new editor //----------------------------------------- IPS_Lite_Editor[ post_id ] = new ips_text_editor_lite( post_id ); IPS_Lite_Editor[ post_id ].init(); } }; //---------------------------------- // LOAD XML //---------------------------------- xmlobj = new ajax_request(); xmlobj.onreadystatechange( do_request_function ); xmlobj.process( url ); return false; } /*--------------------------------------------*/ // check selection /*--------------------------------------------*/ function checkselection() { var myselection = ''; if ( window.getSelection ) { myselection = window.getSelection(); } else if ( document.selection ) { myselection = document.selection.createRange().text; } else if ( document.getSelection ) { myselection = document.getSelection(); } if ( myselection != '' && myselection != null ) { if ( myselection != mystored_selection ) { document.getElementById('fastreply-pastesel').style.display = ''; mystored_selection = (myselection.toString() != '') ? myselection.toString() : null; } } else { mystored_selection = null; } } /*--------------------------------------------*/ // Paste selection /*--------------------------------------------*/ function pasteselection() { if ( mystored_selection != '' && mystored_selection != null ) { var fr = document.getElementById('fastreplyarea'); if (fr) { fr.value += '[quote]'+mystored_selection+'[/quote]\n'; fr.focus(); } } return false; } /*--------------------------------------------*/ // Link to a post /*--------------------------------------------*/ function link_to_post(pid) { temp = prompt( ipb_lang_tt_prompt, ipb_var_base_url + "showtopic=" + ipb_input_t + "&view=findpost&p=" + pid ); return false; } /*--------------------------------------------*/ // Delete post /*--------------------------------------------*/ function delete_post(theURL) { if (confirm( ipb_lang_js_del_1 )) { window.location.href=theURL; } else { alert ( ipb_lang_js_del_2 ); } } /*--------------------------------------------*/ // Multi quote /*--------------------------------------------*/ function multiquote_add(id) { saved = new Array(); clean = new Array(); add = 1; //----------------------------------- // Get any saved info //----------------------------------- if ( tmp = my_getcookie('mqtids') ) { saved = tmp.split(","); } //----------------------------------- // Remove bit if exists //----------------------------------- for( i = 0 ; i < saved.length; i++ ) { if ( saved[i] != "" ) { if ( saved[i] == id ) { add = 0; } else { clean[clean.length] = saved[i]; } } } //----------------------------------- // Add? //----------------------------------- if ( add ) { clean[ clean.length ] = id; eval("document.mad_"+id+".src=removequotebutton"); eval("document.mad_"+id+".title='-'"); } else { eval(" document.mad_"+id+".src=addquotebutton"); eval("document.mad_"+id+".title='+'"); } my_setcookie( 'mqtids', clean.join(','), 0 ); return false; } /*--------------------------------------------*/ // Check delete /*--------------------------------------------*/ function checkdelete() { if ( ! document.modform.selectedpids.value ) { return false; } isDelete = document.modform.tact.options[document.modform.tact.selectedIndex].value; if (isDelete == 'delete') { formCheck = confirm( lang_suredelete ); if (formCheck == true) { return true; } else { return false; } } } /*--------------------------------------------*/ // Toggle selection //*--------------------------------------------*/ function topic_toggle_pid( pid ) { //----------------------------------- // Got a number? //----------------------------------- if ( isNaN( pid ) ) { return false; } saved = new Array(); clean = new Array(); add = 1; //----------------------------------- // Get form info //----------------------------------- tmp = document.modform.selectedpids.value; saved = tmp.split(","); //----------------------------------- // Remove bit if exists //----------------------------------- for( i = 0 ; i < saved.length; i++ ) { if ( saved[i] != "" ) { if ( saved[i] == pid ) { add = 0; } else { clean[clean.length] = saved[i]; } } } //----------------------------------- // Add? //----------------------------------- if ( add ) { clean[ clean.length ] = pid; eval("document.img"+pid+".src=selectedbutton"); } else { eval(" document.img"+pid+".src=unselectedbutton"); } newvalue = clean.join(','); my_setcookie( 'modpids', newvalue, 0 ); document.modform.selectedpids.value = newvalue; newcount = stacksize(clean); document.modform.gobutton.value = lang_gobutton + ' (' + newcount + ')'; return false; }; function topic_rate() { /** * Settings */ this.settings = { 'allow_rating' : 0, 'default_rating' : 3, 'img_star_on' : 'star_filled.gif', 'img_star_selected' : 'star_selected.gif', 'img_star_off' : 'star_empty.gif', 'img_main_star_0' : 'rating_0.gif', 'img_main_star_1' : 'rating_1.gif', 'img_main_star_2' : 'rating_2.gif', 'img_main_star_3' : 'rating_3.gif', 'img_main_star_4' : 'rating_4.gif', 'img_main_star_5' : 'rating_5.gif', 'img_base_url' : '', 'div_rating_wrapper' : 'topic-rating-wrapper', 'text_rating_image' : 'topic-rating-img-', 'topic-rating-img-main' : 'topic-rating-img-main', 'topic-rating-my-rating' : 'topic-rating-my-rating', 'topic-rating-hits' : 'topic-rating-hits' }; this.languages = { 'img_alt_rate' : '', 'rate_me' : '' }; /** * INIT rating images */ this.init_rating_images = function() { //----------------------------------------- // INIT //----------------------------------------- var html = ''; //----------------------------------------- // Can rate this member? //----------------------------------------- if ( ! this.settings[ 'allow_rating' ] ) { return false; } //----------------------------------------- // Still here? OK... //----------------------------------------- for( var i = 1 ; i <= 5 ; i++ ) { var _onmouseover = ''; var _onmouseout = ''; var _onclick = ''; var _title = ''; _onmouseover = ' onmouseover="this.style.cursor=\'pointer\'; topic_rate.show_rating_images(' + i + ', 0)"'; _onmouseout = ' onmouseout="topic_rate.show_rating_images(-1, 1)"'; _onclick = ' onclick="topic_rate.send_rating(' + i + ')"'; _title = this.languages['img_alt_rate']; html += "-"; } document.getElementById( this.settings['div_rating_wrapper'] ).innerHTML = this.languages['rate_me'] + ' ' + html; //----------------------------------------- // Now set the image... //----------------------------------------- this.show_rating_images( this.settings['default_rating'], 1 ); }; /** * Send rating.. */ this.send_rating = function( rating ) { //----------------------------------------- // INIT //----------------------------------------- rating = rating ? rating : 0; //----------------------------------------- // Got a rating? //----------------------------------------- if ( rating ) { //---------------------------------- // INIT //---------------------------------- var url = ipb_var_base_url+'act=xmlout&do=topic_rate&t='+ipb_input_t+'&rating='+rating; /*--------------------------------------------*/ // Main function to do on request // Must be defined first!! /*--------------------------------------------*/ do_request_function = function() { //---------------------------------- // Ignore unless we're ready to go //---------------------------------- if ( ! xmlobj.readystate_ready_and_ok() ) { xmlobj.show_loading( '' ); return; } xmlobj.hide_loading(); //---------------------------------- // INIT //---------------------------------- var html = xmlobj.xmlhandler.responseText; if ( html == 'no_permission' ) { alert( js_error_no_permission ); } else if ( html != 'error' ) { var _result = html.split(','); var _new_value = _result[0]; var _new_hits = _result[1]; var _new_stars = _result[2]; var _type = _result[3]; //----------------------------------------- // Now set the image... //----------------------------------------- topic_rate.settings['default_rating'] = parseInt( _new_stars ); topic_rate.show_rating_images( topic_rate.settings['default_rating'], 1 ); menu_action_close(); //----------------------------------------- // Update counts //----------------------------------------- document.getElementById('topic-rating-hits').innerHTML = _new_hits; document.getElementById('topic-rating-my-rating').innerHTML = rating; show_inline_messages_instant( 'rating_updated' ); } }; //---------------------------------- // LOAD XML //---------------------------------- xmlobj = new ajax_request(); xmlobj.onreadystatechange( do_request_function ); xmlobj.process( url ); return false; } }; /** * Show rating images.. */ this.show_rating_images = function( rating, restore_default ) { //----------------------------------------- // INIT //----------------------------------------- rating = restore_default ? this.settings['default_rating'] : parseInt( rating ); var star = restore_default ? this.settings['img_star_on'] : this.settings['img_star_selected']; //----------------------------------------- // Set to 0 //----------------------------------------- for( var i = 1 ; i <= 5 ; i++ ) { var _img = document.getElementById( this.settings['text_rating_image'] + i ); _img.src = this.settings['img_base_url'] + '/' + this.settings['img_star_off']; } //----------------------------------------- // Show ones coloured... //----------------------------------------- for( var i = 1 ; i <= rating ; i++ ) { var _img = document.getElementById( this.settings['text_rating_image'] + i ); _img.src = this.settings['img_base_url'] + '/' + star; } //----------------------------------------- // Set main image //----------------------------------------- document.getElementById( this.settings['topic-rating-img-main'] ).src = this.settings['img_base_url'] + '/' + this.settings['img_main_star_' + rating ]; }; };