/*
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";
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;
}