/** ** Main Quotes JavaScript Class With Standard Functions **/ var Quotes = {}; /** END : Main Quotes JavaScript Class With Standard Functions **/ /* JavaScript Tools Functions */ /* * More info at: http://phpjs.org * * This is version: 2.91 * php.js is copyright 2009 Kevin van Zonneveld. * */ (function() { if(typeof(this.PHP_JS) === "undefined"){ var PHP_JS = function(cfgObj) { if(!(this instanceof PHP_JS)) { return new PHP_JS(cfgObj); } this.window = cfgObj && cfgObj.window ? cfgObj.window : window; this.php_js = {}; this.php_js.ini = {}; if (cfgObj) { for (var ini in cfgObj.ini) { this.php_js.ini[ini] = {}; this.php_js.ini[ini].local_value = cfgObj.ini[ini]; this.php_js.ini[ini].global_value = cfgObj.ini[ini]; } } }; } var php_js_shared = {}; PHP_JS.prototype = { constructor: PHP_JS, base64_encode: function (data) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = []; if (!data) { return data; } data = this.utf8_encode(data+''); do { // pack three octets into four hexets o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1<<16 | o2<<8 | o3; h1 = bits>>18 & 0x3f; h2 = bits>>12 & 0x3f; h3 = bits>>6 & 0x3f; h4 = bits & 0x3f; // use hexets to index into b64, and append result to encoded string tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); enc = tmp_arr.join(''); switch (data.length % 3) { case 1: enc = enc.slice(0, -2) + '=='; break; case 2: enc = enc.slice(0, -1) + '='; break; } return enc; }, trim: function (str, charlist) { var whitespace, l = 0, i = 0; str += ''; if (!charlist) { whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000"; } else { charlist += ''; whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1'); } l = str.length; for (i = 0; i < l; i++) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.substring(i); break; } } l = str.length; for (i = l - 1; i >= 0; i--) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.substring(0, i + 1); break; } } return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''; }, utf8_encode: function ( argString ) { var string = (argString+''); var utftext = ""; var start, end; var stringl = 0; start = end = 0; stringl = string.length; for (var n = 0; n < stringl; n++) { var c1 = string.charCodeAt(n); var enc = null; if (c1 < 128) { end++; } else if (c1 > 127 && c1 < 2048) { enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128); } else { enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128); } if (enc !== null) { if (end > start) { utftext += string.substring(start, end); } utftext += enc; start = end = n+1; } } if (end > start) { utftext += string.substring(start, string.length); } return utftext; } }; this.PHP_JS = PHP_JS; }()); $PHP = new PHP_JS();/** END : JavaScript Tools Functions **/ /* JavaScript Tools Functions */ /** ** JavaScript Tools Functions **/ Quotes.JsTools = { /* * Create a form and submit * * @param 'form_id' (string) : ID of newly created form, required * @param 'action' (string) : the URL where submit the form to, required * @param 'params' (object) : the set of variables to submit, in JSON format: {'par1':'val1', 'par2':'val2'}, required * @param 'method' (string) : the method to use: 'get' or 'post', required * @param 'target' (string) : the form target, like frame name or '_blank', optional */ submitForm : function (form_id, action, params, method, target) { var body = document.getElementsByTagName('body')[0]; var form = document.createElement('form'); form.action = action; form.method = method; form.id = form_id; if(target) { form.target = target; } body.appendChild(form); for(var p in params) { if(typeof(params[p])=='function') { continue; } var input = document.createElement('input'); input.type = 'hidden'; input.name = p; input.value = params[p]; document.getElementById(form_id).appendChild(input); } form.submit(); setTimeout(function(){$(form_id).remove();}, 500); } }; /** END : JavaScript Tools Functions **//** END : JavaScript Tools Functions **/ /* Quotes Sites JavaScript Functions */ /** ** Quotes Sites JavaScript Functions **/ Quotes.Public = { /* * Add quote to favorites */ addQuoteToFavorites : function(quote_id) { if(!/^\d+$/.test(quote_id)) { alert('Quote ID \'' + quote_id + '\' is not valid!'); return false; } $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).removeClassName('cssSprite1QuoteFavoriteAddGray').removeClassName('cssSprite1QuoteFavoriteAdd').addClassName('quoteContainerFavoriteImageLoading'); $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).src = '/images/_icon_loading_2.gif'; new Ajax.Request( '/libs/functions.php', { method:'post', postBody:'FUNCTION=addQuoteToFavorites&PARAMS[]=' + escape(quote_id).replace(/\+/, '%2B'), asynchronous:true, evalScripts:true, onSuccess:function(t) { try { var response_object = eval(t.responseText); } catch(e) { $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).removeClassName('quoteContainerFavoriteImageLoading').removeClassName('cssSprite1QuoteFavoriteAddGray').addClassName('cssSprite1QuoteFavoriteAdd'); $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert('Server data error! Please try again..\n\nServer response:\n' + response); return false; } if(response_object === false) { $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).removeClassName('quoteContainerFavoriteImageLoading').removeClassName('cssSprite1QuoteFavoriteAddGray').addClassName('cssSprite1QuoteFavoriteAdd'); $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert('Connection error! Please try again..'); return false; } if(response_object.result == false) { $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).removeClassName('quoteContainerFavoriteImageLoading').removeClassName('cssSprite1QuoteFavoriteAddGray').addClassName('cssSprite1QuoteFavoriteAdd'); $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert(response_object.error_str); return false; } $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).removeClassName('quoteContainerFavoriteImageLoading').removeClassName('cssSprite1QuoteFavoriteAdd').addClassName('cssSprite1QuoteFavoriteAddGray'); $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).src = '/images/_spacer.gif'; $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).onclick = function(){}; }, onFailure:function() { $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).removeClassName('quoteContainerFavoriteImageLoading').removeClassName('cssSprite1QuoteFavoriteAddGray').addClassName('cssSprite1QuoteFavoriteAdd'); $('QUOTE_CONTAINER_FAVORITE_ADD_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert('Connection error! Please try your request again!'); } }); }, /* * Send a message from 'Tell a Friend' page */ contactUsSendMessage : function() { var your_name = $('CONTACT_US_YOUR_NAME').value; if($PHP.trim(your_name) == '') { alert('Your name is empty!'); $('CONTACT_US_YOUR_NAME').setFocus(); return false; } var your_email = $('CONTACT_US_YOUR_EMAIL').value; if($PHP.trim(your_email) != '' && !/\b[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}\b/i.test(your_email)) { alert('Your email is not valid email address!'); $('CONTACT_US_YOUR_EMAIL').setFocus(); return false; } var subject = $('CONTACT_US_SUBJECT').value; if($PHP.trim(subject) == '') { alert('Subject is empty!'); $('CONTACT_US_SUBJECT').setFocus(); return false; } var message = $('CONTACT_US_MESSAGE').value; if($PHP.trim(message) == '') { alert('Message text is empty!'); $('CONTACT_US_MESSAGE').setFocus(); return false; } $('CONTACT_US_SEND_IMAGE').addClassName('hiddenElement'); $('CONTACT_US_LOADING_IMAGE').removeClassName('hiddenElement'); new Ajax.Request( '/libs/functions.php', { method:'post', postBody:'FUNCTION=contactUsSendMessage&PARAMS[]=' + escape($PHP.base64_encode(your_name)).replace(/\+/, '%2B') + '&PARAMS[]=' + escape($PHP.base64_encode(your_email)).replace(/\+/, '%2B') + '&PARAMS[]=' + escape($PHP.base64_encode(subject)).replace(/\+/, '%2B') + '&PARAMS[]=' + escape($PHP.base64_encode(message)).replace(/\+/, '%2B'), asynchronous:true, evalScripts:true, onSuccess:function(t) { if($PHP.trim(t.responseText) && /contactUsThankYouContainer/i.test(t.responseText)) { $('CONTACT_US_CONTAINER').innerHTML = t.responseText; } else { $('CONTACT_US_SEND_IMAGE').removeClassName('hiddenElement'); $('CONTACT_US_LOADING_IMAGE').addClassName('hiddenElement'); alert('Connection error! Please try your request again!'); } }, onFailure:function() { $('CONTACT_US_SEND_IMAGE').removeClassName('hiddenElement'); $('CONTACT_US_LOADING_IMAGE').addClassName('hiddenElement'); alert('Connection error! Please try your request again!'); } }); }, /* * Delete quote(s) from favorites list * * @param 'quote_id' (integer) : quote ID to delete, '0' to delete all quotes from favorites list, required */ deleteQuoteFromFavorites : function(quote_id) { if(!/^\d+$/.test(quote_id)) { alert('Quote ID \'' + quote_id + '\' is not valid!'); return false; } if(!confirm('Do you really want to delete ' + ((quote_id == '0') ? 'all quotes' : 'this quote') + ' from your favorite list?')) { return false; } if(quote_id != '0') { $('QUOTE_CONTAINER_FAVORITE_DELETE_BUTTON_' + quote_id).addClassName('quoteContainerFavoriteImageLoading'); $('QUOTE_CONTAINER_FAVORITE_DELETE_BUTTON_' + quote_id).src = '/images/_icon_loading_2.gif'; } setTimeout(function(){Quotes.JsTools.submitForm('FAVORITE_LIST', '/favorite_quotes.html', {'FUNCTION':'deleteQuoteFromFavorites', 'PARAMS[]':quote_id}, 'post', '_self');}, 500); }, /* * Fix author description container height when description is more than one line */ fixAuthorDescriptionContainerHeight : function() { if(document.getElementById('QUOTE_BY_AUTHOR_DESCRIPTION') && new Number(document.getElementById('QUOTE_BY_AUTHOR_DESCRIPTION').offsetHeight) > 22) { document.getElementById('QUOTE_BY_AUTHOR_DESCRIPTION_LINE').className = 'quotesListByAuthorAuthorDescriptionLine2'; document.getElementById('QUOTE_BY_AUTHOR_DESCRIPTION_LINE').setAttribute('class', 'quotesListByAuthorAuthorDescriptionLine2'); } }, /* * Load featured authors to the page header */ getFeaturedAuthors : function(page_number) { $('FEATURED_AUTHORS_LOADER_IMAGE').src = '/images/_header_loader.gif'; $('FEATURED_AUTHORS_LOADER').className = 'featuredAuthorsLoader'; $('FEATURED_AUTHORS_LOADER').setAttribute('class', 'featuredAuthorsLoader'); $('FEATURED_AUTHORS_CONTAINER').className = 'featuredAuthorsListLoading'; $('FEATURED_AUTHORS_CONTAINER').setAttribute('class', 'featuredAuthorsListLoading'); new Ajax.Request( '/libs/functions.php', { method:'post', postBody:'FUNCTION=getFeaturedAuthors&PARAMS[]=' + page_number, asynchronous:true, evalScripts:true, onSuccess:function(t) { $('FEATURED_AUTHORS_LOADER').className = 'featuredAuthorsLoaderHidden'; $('FEATURED_AUTHORS_LOADER').setAttribute('class', 'featuredAuthorsLoaderHidden'); $('FEATURED_AUTHORS_CONTAINER').className = 'featuredAuthorsList'; $('FEATURED_AUTHORS_CONTAINER').setAttribute('class', 'featuredAuthorsList'); if($PHP.trim(t.responseText) && /featuredAuthorsHeader/i.test(t.responseText)) { $('FEATURED_AUTHORS_CONTAINER').innerHTML = t.responseText; } else { alert('Connection error! Please try your request again!'); } }, onFailure:function() { $('FEATURED_AUTHORS_LOADER').className = 'featuredAuthorsLoaderHidden'; $('FEATURED_AUTHORS_LOADER').setAttribute('class', 'featuredAuthorsLoaderHidden'); $('FEATURED_AUTHORS_CONTAINER').className = 'featuredAuthorsList'; $('FEATURED_AUTHORS_CONTAINER').setAttribute('class', 'featuredAuthorsList'); alert('Connection error! Please try your request again!'); } }); }, /* * Function executed with OnLoad event */ initializePage : function() { if($PHP.trim(document.getElementById('TOP_HEADER_SEARCH_STRING').value) != '') { document.getElementById('TOP_HEADER_SEARCH_STRING').onfocus(); } setTimeout(function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = '/css_js/proto.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = 'http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4e12eed0231939c9'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); }, 10); }, /* * Make a search request * * @param 'search_string_id' (string) : ID of element with search string, required * @param 'search_type_id' (string) : ID of element with search type, required */ performSearch : function(search_string_id, search_type_id, page) { var search_string = $(search_string_id).value; var search_type = $(search_type_id).value; if($PHP.trim(search_string) == '') { return false; } if($PHP.trim(search_string.length) < 3) { alert('Search string must be at least 3 characters long!'); $(search_string_id).setFocus(); return false; } search_string = search_string.replace(/ {2,}/g, ' '); var search_words = search_string.split(' '); for(var i = 0; i < search_words.length; i++) { if(!/^[a-z0-9_'"]+$/i.test(search_words[i])) { alert('Word \'' + search_words[i] + '\' can only contain letters, numbers single quote (\'), double quote (") and underscore (_)!'); return false; } } Quotes.JsTools.submitForm('SEARCH_FORM', '/search.html', {'SEARCH_STRING':search_string, 'SEARCH_TYPE':search_type, 'PAGE':page}, 'post', '_self'); }, /* * Submit a quote */ submitQuote : function() { var quotation = $('SUBMIT_QUOTE_QUOTATION').value; if($PHP.trim(quotation) == '') { alert('Quotation text is empty!'); $('SUBMIT_QUOTE_QUOTATION').setFocus(); return false; } var author = $('SUBMIT_QUOTE_AUTHOR').value; if($PHP.trim(author) == '') { alert('Author name is empty!'); $('SUBMIT_QUOTE_AUTHOR').setFocus(); return false; } var submitted_by = $('SUBMIT_QUOTE_SUBMITTED_BY').value; if($PHP.trim(submitted_by) == '') { alert('Submitted by name is empty!'); $('SUBMIT_QUOTE_SUBMITTED_BY').setFocus(); return false; } $('SUBMIT_QUOTE_SEND_IMAGE').addClassName('hiddenElement'); $('SUBMIT_QUOTE_LOADING_IMAGE').removeClassName('hiddenElement'); new Ajax.Request( '/libs/functions.php', { method:'post', postBody:'FUNCTION=submitQuote&PARAMS[]=' + escape($PHP.base64_encode(quotation)).replace(/\+/, '%2B') + '&PARAMS[]=' + escape($PHP.base64_encode(author)).replace(/\+/, '%2B') + '&PARAMS[]=' + escape($PHP.base64_encode(submitted_by)).replace(/\+/, '%2B'), asynchronous:true, evalScripts:true, onSuccess:function(t) { if($PHP.trim(t.responseText) && /submitQuoteThankYouContainer/i.test(t.responseText)) { $('SUBMIT_QUOTE_CONTAINER').innerHTML = t.responseText; } else { $('SUBMIT_QUOTE_SEND_IMAGE').removeClassName('hiddenElement'); $('SUBMIT_QUOTE_LOADING_IMAGE').addClassName('hiddenElement'); alert('Connection error! Please try your request again!'); } }, onFailure:function() { $('SUBMIT_QUOTE_SEND_IMAGE').removeClassName('hiddenElement'); $('SUBMIT_QUOTE_LOADING_IMAGE').addClassName('hiddenElement'); alert('Connection error! Please try your request again!'); } }); }, /* * Send a message from 'Tell a Friend' page */ tellAFriendSendMessage : function() { var your_name = $('TELL_A_FRIEND_YOUR_NAME').value; if($PHP.trim(your_name) == '') { alert('Your name is empty!'); $('TELL_A_FRIEND_YOUR_NAME').setFocus(); return false; } var your_email = $('TELL_A_FRIEND_YOUR_EMAIL').value; if($PHP.trim(your_email) == '') { alert('Your email is empty!'); $('TELL_A_FRIEND_YOUR_EMAIL').setFocus(); return false; } if(!/\b[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}\b/i.test(your_email)) { alert('Your email is not valid email address!'); $('TELL_A_FRIEND_YOUR_EMAIL').setFocus(); return false; } var friend_name = $('TELL_A_FRIEND_FRIEND_NAME').value; if($PHP.trim(friend_name) == '') { alert('Friend\'s name is empty!'); $('TELL_A_FRIEND_FRIEND_NAME').setFocus(); return false; } var friend_email = $('TELL_A_FRIEND_FRIEND_EMAIL').value; if($PHP.trim(friend_email) == '') { alert('Friend\'s email is empty!'); $('TELL_A_FRIEND_FRIEND_EMAIL').setFocus(); return false; } if(!/\b[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}\b/i.test(friend_email)) { alert('Friend\'s email is not valid email address!'); $('TELL_A_FRIEND_FRIEND_EMAIL').setFocus(); return false; } $('TELL_A_FRIEND_SEND_IMAGE').addClassName('hiddenElement'); $('TELL_A_FRIEND_LOADING_IMAGE').removeClassName('hiddenElement'); new Ajax.Request( '/libs/functions.php', { method:'post', postBody:'FUNCTION=tellAFriendSendMessage&PARAMS[]=' + escape(your_name).replace(/\+/, '%2B') + '&PARAMS[]=' + escape(your_email).replace(/\+/, '%2B') + '&PARAMS[]=' + escape(friend_name).replace(/\+/, '%2B') + '&PARAMS[]=' + escape(friend_email).replace(/\+/, '%2B'), asynchronous:true, evalScripts:true, onSuccess:function(t) { if($PHP.trim(t.responseText) && /tellAFriendThankYouContainer/i.test(t.responseText)) { $('TELL_A_FRIEND_CONTAINER').innerHTML = t.responseText; } else { $('TELL_A_FRIEND_SEND_IMAGE').removeClassName('hiddenElement'); $('TELL_A_FRIEND_LOADING_IMAGE').addClassName('hiddenElement'); alert('Connection error! Please try your request again!'); } }, onFailure:function() { $('TELL_A_FRIEND_SEND_IMAGE').removeClassName('hiddenElement'); $('TELL_A_FRIEND_LOADING_IMAGE').addClassName('hiddenElement'); alert('Connection error! Please try your request again!'); } }); }, /* * Vote for the quote * * @param 'quote_id' (integer) : quote ID, required */ voteForQuote : function(quote_id) { if(!/^\d+$/.test(quote_id)) { alert('Quote ID \'' + quote_id + '\' is not valid!'); return false; } $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).removeClassName('cssSprite1QuoteLikeGray').removeClassName('cssSprite1QuoteLike').addClassName('quoteContainerVoteImageLoading'); $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).src = '/images/_icon_loading_2.gif'; new Ajax.Request( '/libs/functions.php', { method:'post', postBody:'FUNCTION=voteForQuote&PARAMS[]=' + escape(quote_id).replace(/\+/, '%2B'), asynchronous:true, evalScripts:true, onSuccess:function(t) { try { var response_object = eval(t.responseText); } catch(e) { $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).removeClassName('quoteContainerVoteImageLoading').removeClassName('cssSprite1QuoteLikeGray').addClassName('cssSprite1QuoteLike'); $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert('Server data error! Please try again..\n\nServer response:\n' + response); return false; } if(response_object === false) { $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).removeClassName('quoteContainerVoteImageLoading').removeClassName('cssSprite1QuoteLikeGray').addClassName('cssSprite1QuoteLike'); $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert('Connection error! Please try again..'); return false; } if(response_object.result == false) { $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).removeClassName('quoteContainerVoteImageLoading').removeClassName('cssSprite1QuoteLikeGray').addClassName('cssSprite1QuoteLike'); $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert(response_object.error_str); return false; } $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).removeClassName('quoteContainerVoteImageLoading').removeClassName('cssSprite1QuoteLike').addClassName('cssSprite1QuoteLikeGray'); $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).src = '/images/_spacer.gif'; $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).onclick = function(){}; $('QUOTE_CONTAINER_VOTE_COUNT_' + quote_id).innerHTML = response_object.total_votes_count; }, onFailure:function() { $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).removeClassName('quoteContainerVoteImageLoading').removeClassName('cssSprite1QuoteLikeGray').addClassName('cssSprite1QuoteLike'); $('QUOTE_CONTAINER_VOTE_BUTTON_' + quote_id).src = '/images/_spacer.gif'; alert('Connection error! Please try your request again!'); } }); } }; /** END : Quotes Sites JavaScript Functions **//* END : Quotes Sites JavaScript Functions */