/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 0.12.2 */ /** * The YAHOO object is the single global object used by YUI Library. It * contains utility function for setting up namespaces, inheritance, and * logging. YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces * created automatically for and used by the library. * @module yahoo * @title YAHOO Global */ if (typeof YAHOO == "undefined") { /** * The YAHOO global namespace object * @class YAHOO * @static */ var YAHOO = {}; } /** * Returns the namespace specified and creates it if it doesn't exist *
 * YAHOO.namespace("property.package");
 * YAHOO.namespace("YAHOO.property.package");
 * 
* Either of the above would create YAHOO.property, then * YAHOO.property.package * * Be careful when naming packages. Reserved words may work in some browsers * and not others. For instance, the following will fail in Safari: *
 * YAHOO.namespace("really.long.nested.namespace");
 * 
* This fails because "long" is a future reserved word in ECMAScript * * @method namespace * @static * @param {String*} arguments 1-n namespaces to create * @return {Object} A reference to the last namespace object created */ YAHOO.namespace = function() { var a=arguments, o=null, i, j, d; for (i=0; i= 200 && httpStatus < 300){ try { responseObject = this.createResponseObject(o, callback.argument); if(callback.success){ if(!callback.scope){ callback.success(responseObject); } else{ // If a scope property is defined, the callback will be fired from // the context of the object. callback.success.apply(callback.scope, [responseObject]); } } } catch(e){} } else{ try { switch(httpStatus){ // The following cases are wininet.dll error codes that may be encountered. case 12002: // Server timeout case 12029: // 12029 to 12031 correspond to dropped connections. case 12030: case 12031: case 12152: // Connection closed by server. case 13030: // See above comments for variable status. responseObject = this.createExceptionObject(o.tId, callback.argument, (isAbort?isAbort:false)); if(callback.failure){ if(!callback.scope){ callback.failure(responseObject); } else{ callback.failure.apply(callback.scope, [responseObject]); } } break; default: responseObject = this.createResponseObject(o, callback.argument); if(callback.failure){ if(!callback.scope){ callback.failure(responseObject); } else{ callback.failure.apply(callback.scope, [responseObject]); } } } } catch(e){} } this.releaseObject(o); responseObject = null; }, /** * @description This method evaluates the server response, creates and returns the results via * its properties. Success and failure cases will differ in the response * object's property values. * @method createResponseObject * @private * @static * @param {object} o The connection object * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback * @return {object} */ createResponseObject:function(o, callbackArg) { var obj = {}; var headerObj = {}; try { var headerStr = o.conn.getAllResponseHeaders(); var header = headerStr.split('\n'); for(var i=0; i'); // IE will throw a security exception in an SSL environment if the // iframe source is undefined. if(typeof secureUri == 'boolean'){ io.src = 'javascript:false'; } else if(typeof secureURI == 'string'){ // Deprecated io.src = secureUri; } } else{ var io = document.createElement('iframe'); io.id = frameId; io.name = frameId; } io.style.position = 'absolute'; io.style.top = '-1000px'; io.style.left = '-1000px'; document.body.appendChild(io); }, /** * @description Parses the POST data and creates hidden form elements * for each key-value, and appends them to the HTML form object. * @method appendPostData * @private * @static * @param {string} postData The HTTP POST data * @return {array} formElements Collection of hidden fields. */ appendPostData:function(postData) { var formElements = []; var postMessage = postData.split('&'); for(var i=0; i < postMessage.length; i++){ var delimitPos = postMessage[i].indexOf('='); if(delimitPos != -1){ formElements[i] = document.createElement('input'); formElements[i].type = 'hidden'; formElements[i].name = postMessage[i].substring(0,delimitPos); formElements[i].value = postMessage[i].substring(delimitPos+1); this._formNode.appendChild(formElements[i]); } } return formElements; }, /** * @description Uploads HTML form, including files/attachments, to the * iframe created in createFrame. * @method uploadFile * @private * @static * @param {int} id The transaction id. * @param {object} callback - User-defined callback object. * @param {string} uri Fully qualified path of resource. * @return {void} */ uploadFile:function(id, callback, uri, postData){ // Each iframe has an id prefix of "yuiIO" followed // by the unique transaction id. var frameId = 'yuiIO' + id; var io = document.getElementById(frameId); // Initialize the HTML form properties in case they are // not defined in the HTML form. this._formNode.action = uri; this._formNode.method = 'POST'; this._formNode.target = frameId; if(this._formNode.encoding){ // IE does not respect property enctype for HTML forms. // Instead use property encoding. this._formNode.encoding = 'multipart/form-data'; } else{ this._formNode.enctype = 'multipart/form-data'; } if(postData){ var oElements = this.appendPostData(postData); } this._formNode.submit(); if(oElements && oElements.length > 0){ try { for(var i=0; i < oElements.length; i++){ this._formNode.removeChild(oElements[i]); } } catch(e){} } // Reset HTML form status properties. this.resetFormState(); // Create the upload callback handler that fires when the iframe // receives the load event. Subsequently, the event handler is detached // and the iframe removed from the document. var uploadCallback = function() { var obj = {}; obj.tId = id; obj.argument = callback.argument; try { obj.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null; obj.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document; } catch(e){} if(callback.upload){ if(!callback.scope){ callback.upload(obj); } else{ callback.upload.apply(callback.scope, [obj]); } } if(YAHOO.util.Event){ YAHOO.util.Event.removeListener(io, "load", uploadCallback); } else if(window.detachEvent){ io.detachEvent('onload', uploadCallback); } else{ io.removeEventListener('load', uploadCallback, false); } setTimeout(function(){ document.body.removeChild(io); }, 100); }; // Bind the onload handler to the iframe to detect the file upload response. if(YAHOO.util.Event){ YAHOO.util.Event.addListener(io, "load", uploadCallback); } else if(window.attachEvent){ io.attachEvent('onload', uploadCallback); } else{ io.addEventListener('load', uploadCallback, false); } }, /** * @description Method to terminate a transaction, if it has not reached readyState 4. * @method abort * @public * @static * @param {object} o The connection object returned by asyncRequest. * @param {object} callback User-defined callback object. * @param {string} isTimeout boolean to indicate if abort was a timeout. * @return {boolean} */ abort:function(o, callback, isTimeout) { if(this.isCallInProgress(o)){ o.conn.abort(); window.clearInterval(this._poll[o.tId]); delete this._poll[o.tId]; if(isTimeout){ delete this._timeOut[o.tId]; } this.handleTransactionResponse(o, callback, true); return true; } else{ return false; } }, /** * Public method to check if the transaction is still being processed. * * @method isCallInProgress * @public * @static * @param {object} o The connection object returned by asyncRequest * @return {boolean} */ isCallInProgress:function(o) { // if the XHR object assigned to the transaction has not been dereferenced, // then check its readyState status. Otherwise, return false. if(o.conn){ return o.conn.readyState != 4 && o.conn.readyState != 0; } else{ //The XHR object has been destroyed. return false; } }, /** * @description Dereference the XHR instance and the connection object after the transaction is completed. * @method releaseObject * @private * @static * @param {object} o The connection object * @return {void} */ releaseObject:function(o) { //dereference the XHR instance. o.conn = null; //dereference the connection object. o = null; } };var IE = document.all?true:false; var create_account_accept_suffix = ""; var create_account_input_email = ""; var create_account_input_reconfirm_email = ""; var create_account_popup_width = 450; var create_account_popup_height = 400; var myinterval = null; var jcap_num = 82; function cimg(){ var imgdir = "/tools/jcap_ext/cimg/"; //identify directory where captcha images are located imgid = parseInt(jcap_num); return ''; } var content_form = "
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

account creation by email suffix

\r\n
\r\n

Please input email with suffix: ""

\r\n
\r\n

All fields are compulsory

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Email:
Re-confirm email:
Enter the security
code shown above:
\r\n
\r\n This helps prevent automated registrations.\r\n
\r\n
\r\n\r\n"; var RemarkDialog = function() { // define some private variables var dialog, showBtn1, showBtn2; var dwidth=create_account_popup_width, dheight=create_account_popup_height; var toggleTheme = function(){ getEl(document.body, true).toggleClass('ytheme-gray'); }; // return a public interface return { init : function() { showBtn1 = getEl('show-create_acct-btn1'); showBtn1.on('click', this.showDialog, showBtn1, true); showBtn2 = getEl('show-create_acct-btn2'); if (showBtn2) { showBtn2.on('click', this.showDialog, showBtn2, true); } }, showDialog : function() { if (!dialog) { dialog = new YAHOO.ext.BasicDialog("remark-dlg", { modal:true, autoTabs:true, width:dwidth, height:dheight, shadow:true, minWidth:300, minHeight:200, proxyDrag: false }); dialog.addKeyListener(27, dialog.hide, dialog); dialog.addButton('Close', dialog.hide, dialog); } var scrollpos = bas_getScrollPos(); var windowdims = bas_getWindowDims(); var left_pos = windowdims["w"] / 2 - dwidth / 2; if (left_pos < 1) { left_pos = 0; } var top_pos = windowdims["h"] / 2 - dheight / 2; if (top_pos < 1) { top_pos = 0; } var top_pos = top_pos + scrollpos["y"]; dialog.resizeTo(dwidth, dheight); var contentObj = document.getElementById("remark-dlg-content"); if (this.id == "show-create_acct-btn1" || this.id == "show-create_acct-btn2") { var curr_content_form = content_form.replace("", cimg()); if (create_account_accept_suffix != "") curr_content_form = curr_content_form.replace("", create_account_accept_suffix); contentObj.innerHTML = curr_content_form; } dialog.show(this.dom); InitCheckSubmit(); if (navigator.appName == "Microsoft Internet Explorer") { dialog.moveTo(left_pos, top_pos); } } }; }(); function InitCheckSubmit() { myinterval = window.setInterval(CheckSubmit, 500); return; } function CheckSubmit() { obj = document.getElementById("form_create_acct"); if (!obj) return; if (trim(obj.email.value) == "") return; if (trim(obj.reconfirm_email.value) == "") return; if (trim(obj.security_code.value) == "") return; obj.submit.disabled = false; window.clearInterval(myinterval); return; } var args = ['foo','bar']; var create_acct_responseSuccess = function(o){ var contentObj = document.getElementById("remark-dlg-content"); var curr_content_form = content_form.replace("", create_account_accept_suffix); var result_array = o.responseText.split("|"); if (result_array && result_array[0] == "success") { jcap_num = result_array[1]; contentObj.innerHTML = result_array[2]; return; } else if (result_array && result_array[0] == "failure") { curr_content_form = curr_content_form.replace("All fields are compulsory", result_array[2]); if (result_array[1] == "1020") curr_content_form = curr_content_form.replace("", " * "); if (result_array[1] == "1014") curr_content_form = curr_content_form.replace("", " * "); if (result_array[1] == "1021") curr_content_form = curr_content_form.replace("", " * "); } else { curr_content_form = curr_content_form.replace("All fields are compulsory", "Failed to create account!"); } curr_content_form = curr_content_form.replace("", cimg()); contentObj.innerHTML = curr_content_form; obj = document.getElementById("form_create_acct"); obj.email.value = create_account_input_email; obj.reconfirm_email.value = create_account_input_reconfirm_email; InitCheckSubmit(); return; }; var create_acct_responseFailure = function(o){ var contentObj = document.getElementById("remark-dlg-content"); contentObj.innerHTML = "Failed to connect server!"; return; } var create_acct_callback = { success:create_acct_responseSuccess, failure:create_acct_responseFailure, argument:args }; function SubmitForm() { obj = document.getElementById("form_create_acct"); obj.email.value = trim(obj.email.value); obj.reconfirm_email.value = trim(obj.reconfirm_email.value); if (obj.email.value == "") { alert("Please enter your email!"); obj.email.focus(); return false; } if (!validEmail(obj.email.value)) { alert("Invalid email format!"); obj.email.focus(); return false; } if (obj.email.value != obj.reconfirm_email.value) { alert("Re-confirm email incorrect!"); obj.reconfirm_email.focus(); return false; } if (create_account_accept_suffix != "" && obj.email.value.search(create_account_accept_suffix) == -1) { alert("Invaild email domain!"); obj.email.focus(); return false; } if (trim(obj.security_code.value) == "") { alert("Please enter security code!"); obj.security_code.focus(); return false; } var postData = "ACTION_ID=SUBMIT&email=" + obj.email.value + "&security_code=" + obj.security_code.value + "&reconfirm_email=" + obj.reconfirm_email.value; var sUrl = "/js/membership/process.php"; var transaction = YAHOO.util.Connect.asyncRequest('POST', sUrl, create_acct_callback, postData); create_account_input_email = obj.email.value; create_account_input_reconfirm_email = obj.reconfirm_email.value; var contentObj = document.getElementById("remark-dlg-content"); return true; }