
Array.prototype.autofill = function _array_autofill(autofillValue)
{
    for ( var i = 0; i < this.length; i++)
        this[i] = autofillValue;
}
Array.prototype.inArray = function ( obj ) 
{
    var len = this.length;
    for (var x = 0 ; x < len; ++x )
    {
        if ( this[x] == obj ) return true;
    }
    return false;
}

Array.prototype.inArraySubstring = function ( obj ) 
{
    if (!obj) return false;
    var len = this.length;
    for (var x = 0 ; x < len; ++x )
    {
        if ( obj.indexOf(this[x]) == 0 ) return true;
    }
    return false;
}

Array.prototype.inArrayPid = function (obj)
{
    var len = this.length;
    for (var x = 0 ; x < len; ++x )
    {
        if ( this[x].pid == obj.pid ) return true;
    }
    return false;
}
Array.prototype.inArrayUid = function (obj)
{
    var len = this.length;
    for (var x = 0 ; x < len; ++x )
    {
        if ( this[x].uid == obj.uid ) return true;
    }
    return false;
}
Array.prototype.ripl_InArrayKey = function(object, key)
{
	for (var x=0; x < this.length; ++x)
	{
		if (this[x][key] == object[key]) return true;
	}
	return false;

}


Array.prototype.ripl_InArraySubstring = function ( obj ) 
{
    if (!obj) return false;
    var len = this.length;
    for (var x = 0 ; x < len; ++x )
    {
        if ( obj.indexOf(this[x]) == 0 ) return true;
    }
    return false;
}



function isArray(object)
{
    return object != null && typeof object == "object" && 'splice' in object && 'join' in object;
}


function $RF(el, radioGroup) {
    if($(el).type && $(el).type.toLowerCase() == 'radio') 
    {
        var radioGroup = $(el).name;
        var el = $(el).form;
    } 
    else if ($(el).tagName.toLowerCase() != 'form') 
    {
        return false;
    }
 
    var checked = $(el).getInputs('radio', radioGroup).find(
        function(re) {return re.checked;}
    );
    return (checked) ? $F(checked) : null;
}  



String.prototype.trim = function() 
{
    var str = this;
    this.replace(/^\s+/, '');
    for (var i = str.length - 1; i >= 0; i--) {
        if (/\S/.test(str.charAt(i))) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    this.value=str;
    return str;    
}
 

Number.prototype.zf = function _zeroFormat(digits)
{
    var n = this.toString(), pLen = digits - n.length;
    for ( var i = 0; i < pLen; i++)
    {
        n = '0' + n;
    }
    return n;
}

// BEGIN ENGLISH DATE FORMATTERS
Date.prototype.format = function(formatType)
{
    if ((formatType == null) || (formatType == undefined)) formatType = 0; // Make format optional, default to SIMPLETIME.
    if (formatType == Date.SIMPLETIME)
    {
        return this.formatSimple();
    }
    else if (formatType == Date.TIME_SINCE)
    {
        return this.formatSince();
    }
}
Date.Month = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];
Date.prototype.formatSimple = function _formatSimple()
{
    var pOut = [ Date.Month[this.getMonth()], '&nbsp;', this.getDate() + 1, ',&nbsp;', this.getFullYear(), '&nbsp;', // Line Break
            ((h = this.getHours() % 12) ? h : 12), // Hours
            ':', this.getMinutes().zf(2), // Minutes
            this.getHours() < 12 ? ' am' : ' pm' ]; // AM/PM
    
    return pOut.join('');
}
Date.prototype.formatSince = function _formatSince()
{
    var diff = (((new Date()).getTime() - this.getTime()) / 1000);
    var day_diff = Math.floor(diff / 86400);
    if (isNaN(day_diff) || day_diff < 0) return;
    
    return (diff < 60) && 'just now' || (diff < 120) && '1 minute ago' || (diff < 3600) && Math.floor(diff / 60) + ' minutes ago' || (diff < 7200) && '1 hour ago' || (diff < 86400) && Math.floor(diff / 3600) + ' hours ago'
            || (day_diff == 1) && 'Yesterday' || (day_diff < 7) && day_diff + ' days ago' || (day_diff < 12) && '1 week ago' || (day_diff < 28) && Math.ceil(day_diff / 7) + " weeks ago" || (day_diff < 50) && '1 month ago'
            || (day_diff < 320) && Math.ceil(day_diff / 28) + 'months ago' || (diff < 400) && '1 year ago' || 'More than 1 year ago';
}

Date.SIMPLETIME = 0;
Date.TIME_SINCE = 1;

// END ENGLISH DATE FORMATTERS

function submitParentForm(e, obj)
{
	$(obj).up('form').submit();
	return true;
}
function autosubmitform(e, action)
{
    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }
    if (keynum == 13)
    {
    	if(typeof(action)=='function'){
    		action();
    	}else{
            var pForm = $(action);
	        if (pForm){
	        	if(typeof(action)=='string'){
	        		pForm.submit();
	        	}else{
	        		pForm.form.submit();
	        	}
	        }
    	}
        return false;
    }
    return true;
}

function autosubmitfunction(e, closure)
{
    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }
    if (keynum == 13)
    {
        try
        {
            closure();
        }
        catch (e){}
        return false;
    } 
}


/**
 * check user's auth state
 * if redirect is set to true, user will be redirected to login page
 * otherwise will load sign in dialog
 * @param bool redirect
 * @param object post_auth The set of data to encode, save in cookie and read for post auth handling
 * @param object (optional) the element which we will use to populate the auth dialog
 * @return bool
 */
function isAuthed(redirect,post_auth,dialogContainer)
{
    if (!ggCurrentUserId){ // not authed
    	if(post_auth)
    	{
    	    ripl.cookie.unset('returnPage');
//    	    Cookie.unset('returnPage');
    	    
			var l = window.location;
			ripl.cookie.set('returnPage',l.protocol+'//'+l.host+l.pathname+l.search,108000); // path minus hash
			ripl.cookie.set('post_auth',Object.toJSON(post_auth),108000); // 30 minutes
    	}
        if(redirect==true) window.location = Ripl.BaseSSL;
        else
        { // launch sign in
            showLogin();
        }
        return false;
    }
    return true;
}