/*

	$Id: sewm-extras.js,v 1.4 2006/06/28 19:06:18 scottd Exp $

*/


LOGONTYPE_MIN   = 1;
LOGONTYPE_EMAIL = 2;

function parseGetVars () {

    var pairs, pair, keyValArr;
	
    document.getVars = this;
	if ( document.location.search.toString().length ) {
    	pairs = document.location.search.toString().replace ( "?", "" ).split ( "&" );
    	while ( pair = pairs.pop() ) {
			if ( pair ) {
				keyValArr = pair.split ( "=" );
			
				eval ( "document.getVars." + keyValArr[0] + "=" 
					+ ( isNaN ( keyValArr[1] ) ? "\"" + unescape(keyValArr[1]) + "\"" : keyValArr[1]  ) + ";" );
			}
    	}
	}
}

// works like php sprintf, but only uses %s due to the fact that 
// javascript is typeless.
function sprintf ( str ) {
	var retStr = false;
	var currArg = 1;
	try {
		while ( arguments[currArg] ) {
			str = str.replace ( /%s/, arguments[currArg] );
			currArg++;
		}
	}
	catch ( e ) {
		errAlert ( e);
		throw ( "sprintf exception: " + e );
	}

	return str;	
}


function slwc_validateMIN ( min ) {

    if ( min.length != 10 )
        return false;

    return true;
}

function slwc_validateEmailAddress ( eAddress ) {
    rExp = new RegExp ( /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ );
    if ( rExp.test ( eAddress ) )
        return true;
    return false;
}

function slwc_logonType ( logonId ) {
    /* figure out what type of logon were the user
        has requested (Email Address or 10 Digit MIN) */
	if ( !slwc_validateEmailAddress ( logonId ) ) {

		logonId = cleanDestAddress ( logonId, true );

    	if (logonId.charAt(0) == '1')
        	logonId = logonId.slice(1);


    	//if (logonId.indexOf('-') != -1)
        //	logonId = logonId.split('-').join('');

    	//if ( parseInt ( logonId ).toString().length == logonId.length )
        	return LOGONTYPE_MIN;
	
		
	}

    return LOGONTYPE_EMAIL;

}

function slwc_validateAcctDetails ( form ) {
    var lfn = form["__LFN"].value;
    var lln = form["__LLN"].value;

    if ( !lfn.length ) {
        errAlert ( ERROR_SLWC_NOFIRSTNAME );
        form["__LFN"].focus();
        return;
    }

    if ( !lln.length ) {
        errAlert ( ERROR_SLWC_NOLASTNAME );
        form["__LLN"].focus();
        return;
    }


    return true;
}


function slwc_validateCreds ( logonForm ) {
    /* has anything been entered into the logon fields? */
	var lrp = false;
    var lid = Trim ( logonForm["__LID"].value );
    var lpw = Trim ( logonForm["__LPW"].value );

	if ( logonForm["__LRP"] ) {
	 	lrp = logonForm["__LRP"].value;
	}
	else {
		lrp = false;
	}

    var logonType = false;
    var rExp = "";
    if ( !lid.length ) {
        errAlert ( ERROR_SLWC_NOUSERID );
        logonForm["__LID"].focus();
        return false;
    }

	var noPassword = false;
	if ( ( document.location.href.indexOf ( "account-details" ) > -1 ) 
			&& ( lpw.length == 0 ) && ( lrp.length == 0 ) )
		noPassword = true;

    if ( !lpw.length && !noPassword ) {
        errAlert ( ERROR_SLWC_NOPASSWORD );
        logonForm["__LPW"].focus();
        return false;
    }

	// problem - lrp may be a null string, which causes this check
	// to be skipped. 
	if ( ( lrp != false ) && !noPassword ) {
		if ( !lrp.length ) {
			errAlert ( ERROR_SLWC_REENTERPASSWORD );
			logonForm["__LRP"].focus();
			return false;
		}

		if ( lpw != lrp ) {
        	errAlert ( ERROR_SLWC_PASSWORDSDONTMATCH );
         	logonForm["__LPW"].value = ""; 
         	logonForm["__LRP"].value = "";
         	logonForm["__LPW"].focus(); 
        	return false;
    	}
	}

    logonType = slwc_logonType ( lid );

    switch ( logonType ) {
        case LOGONTYPE_MIN:

			lid = cleanDestAddress ( lid, true );
		
            if (lid.charAt(0) == '1')
				lid = lid.slice(1);

			/*
            if (lid.indexOf('-') != -1)
                lid = lid.split('-').join('');
			*/


            /* update the form field, so the user see's that we changed it on them. */
            logonForm["__LID"].value = lid;

            if ( !slwc_validateMIN ( lid ) ) {
                errAlert ( ERROR_SLWC_MINNOTVALID );
                logonForm["__LID"].focus();
                return false;
            }
            logonForm["__LIT"].value = 1;
            break;

        case LOGONTYPE_EMAIL:
            if ( !slwc_validateEmailAddress ( lid ) ) {
                errAlert ( ERROR_SLWC_EMAILNOTVALID );
                logonForm["__LID"].focus();
                return false;
            }
            logonForm["__LIT"].value = 2;
            break;
    }

    return true;
}


function slwc_makePostString ( form, noPasswdMd5 ) {
    var outStr = "";
    outStr += "action=" + form.action;
    for ( var x = 0; x < form.length; x++ ) {
		try {
        	outStr += "&" + form[x].name + "=" 
				+ ( ( ( form[x].name == "__LPW" ) && !noPasswdMd5 && typeof ( hex_md5 == "function" ) ) ? hex_md5 ( form[x].value + form["__CHG"].value ) : form[x].value );
		}
		catch (e) {
			
		}
	}

    return outStr;
}

function slwc_argsObjToPostString ( argsObj ) {
	var reqStr = "";
	var arg;
	for ( arg in argsObj ) {
        if ( argsObj[arg] ) {
            if ( reqStr != "" )
                reqStr += "&";
            reqStr += arg + "=" + escape ( argsObj[arg] );
        }
    }
	return reqStr;
}

/**************************************************************
 LTrim: Returns a String containing a copy of a specified 
        string without leading spaces 

 Parameters:
      String = The required string argument is any valid 
               string expression. If string contains null, 
               false is returned

 Returns: String
***************************************************************/
function LTrim(String)
{
	var i = 0;
	var j = String.length - 1;

	if (String == null)
		return (false);

	for (i = 0; i < String.length; i++)
	{
		if (String.substr(i, 1) != ' ' &&
		    String.substr(i, 1) != '\t')
			break;
	}

	if (i <= j)
		return (String.substr(i, (j+1)-i));
	else
		return ('');
}

/**************************************************************
 RTrim: Returns a String containing a copy of a specified 
        string without trailing spaces 

 Parameters:
      String = The required string argument is any valid 
               string expression. If string contains null, 
               false is returned

 Returns: String
***************************************************************/
function RTrim(String)
{
	var i = 0;
	var j = String.length - 1;

	if (String == null)
		return (false);

	for(j = String.length - 1; j >= 0; j--)
	{
		if (String.substr(j, 1) != ' ' &&
			String.substr(j, 1) != '\t')
		break;
	}

	if (i <= j)
		return (String.substr(i, (j+1)-i));
	else
		return ('');
}

/**************************************************************
 RTrim: Returns a String containing a copy of a specified 
        string without both leading and trailing spaces 

 Parameters:
      String = The required string argument is any valid 
               string expression. If string contains null, 
               false is returned

 Returns: String
***************************************************************/
function Trim(String)
{
	if (String == null)
		return (false);

	return RTrim(LTrim(String));
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function formatClientPin ( clientPin ) {
	var leftSeg = 0;
	var rightSeg = 0;
	if ( clientPin > 9999 ) {
        // shifting shortcut - neat eh? gets the leftmost significant
        // digits > 9999
        leftSeg = Math.floor ( ( ( clientPin / 10000 ) % 10000 ) );
        // now get the remaining rightmost significant digits.
        rightSeg = ( clientPin - ( leftSeg * 10000 ) );
    }
    else {
        // nothin to do, leftside is 0, rightside should be the client pin
        rightSeg = clientPin;
    }
	return leftSeg + "/" + rightSeg;

}

function cleanDestAddress ( el, asString ) {
	// cut and paste handler - check whole string for non-alpha
	pos = 0;
	var string = "";
	if ( asString ) {
		str = el;
		el = new Object();
		el.value = str;	
	}

	do
	{
		if ("0123456789".indexOf(el.value.charAt(pos)) == -1)
	    	el.value = pos ? el.value.slice(0, pos) + el.value.slice(pos + 1) : el.value.slice(1);
		else
		pos++;
	} while (pos < el.value.length);

	if (el.value.charAt(0) == '1')
		el.value = el.value.slice(1);

	if ( asString )
		return el.value;
}

