// @param list: an Array
// @param alias: name for getter function,
//               by default it's "getItem"

function isDefined(varName) {
	
	return typeof(varName) == "undefined" ? false : true;

}

function formatCurrency(num) {
	
   num = num.toString().replace(/\$|\,/g,'');
   
   if(isNaN(num)) {
      num = "0";
   }
   
   sign = (num == (num = Math.abs(num)));
   
   num = Math.floor(num*100+0.50000000001);
   
   cents = num%100;
   
   num = Math.floor(num/100).toString();
   
   if (cents<10) {
     cents = "0" + cents;
   }
   for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
      num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
   }
   
   return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function formatNumeric(num) {
	
	   num = num.toString().replace(/\$|\,/g,'');
	   
	   if(isNaN(num)) {
	      num = "0";
	   }
	   
	   sign = (num == (num = Math.abs(num)));
	   
	   num = Math.floor(num*100+0.50000000001);
	   
	   num = Math.floor(num/100).toString();
	   
	   for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
	      num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	   }
	   
	   return (((sign)?'':'-') + num);
	}

function RandomList(list, alias) {

	if (!list) {
		return;
	}

	var length = list.length;
	this.indexes = [];

	this.remainingItems = function() {
		return this.indexes.length;
	};

	this[alias || 'getItem'] = function() {
		var rand = Math.floor(Math.random() * this.indexes.length), item = list[this.indexes[rand]];
		this.indexes.splice(rand, 1);
		return item;
	};

	while (length--) {
		this.indexes[this.indexes.length] = length;
	}

}


function getBody(){
    return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}

function setPopupAlignCenter(id){
	
	//alert(id);
	
    var popupDiv = document.getElementById(id);
    
    // alert(getBody().clientWidth);
    
   // alert(getBody().offsetHeight);
    
    popupDiv.style.top=(getBody().clientWidth/2 - popupDiv.offsetWidth)+'px';
    
    popupDiv.style.left=(getBody().clientHeight/2 - popupDiv.offsetHeight)+'px';
}

function checkFileExt(fileField, fileType){
	
	var filepath = fileField.value; 

	var re = '/(\\+)/g'; 
	
	var filename = filepath.replace(re,"#");

	var one   = filename.split("#");

	var two   = one[one.length-1];

	var three = two.split(".");

	var last  = three[three.length-1];

	var tp = "jpg,gif,bmp,JPG,GIF,BMP";
	
	if (fileType != null) {
		
		tp = fileType;
	}

	var rs = tp.indexOf(last);

	if(rs >= 0){
		
	    return true;
	} else {
		
	    return false;
	}
}

function checkImagesFileExt(fileName) {
	
	var re = '/(\\+)/g'; 
	
	var fileName = fileName.replace(re,"#");

	var start = fileName.lastIndexOf(".");
	
	var end   = fileName.length;

	var fileType = fileName.substring(start+1, end);
	
	fileType     = fileType.toLowerCase();
	
	if (fileType != null) {
		
		switch (fileType) {
		case 'jpg':
		case 'gif':
		case 'bmp':
		  return true;
		default:
		  return false;
		}
	}
	else return false;

}


function generateKey(length) {

	// List of fruit:
	var chars = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
			'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
			'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
			'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
			'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_' ];

	var keys = '';

	for ( var i = 0; i < length; i++) {
		var rd = Math.ceil(Math.random() * (chars.length - 0) + 0);
		if (rd == chars.length)
			rd--;
		keys += chars[rd];
	}

	return keys;

}


function epochToDate(intTime){
	var date = new Date(); 
    var mEpoch = parseInt(intTime); 
    if(mEpoch<10000000000) mEpoch *= 1000;
    date.setTime(mEpoch);
    // alert(d1.getFullYear());
    return date;
} 

function getNormalDate(intTime) {
	
	var date = epochToDate(intTime);
	
	//var timeFormat = (date.getMonth()+1)+'-'+date.getDay()+'-'+date.getFullYear()+ ' ' + date.getHours() + ':'+ date.getMinutes()+ ':' + date.getSeconds();
	
	return date.format('mm/dd/yyyy hh:MM:ss');
}

function isEmail(strEmail) {
	if (strEmail
			.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
		return true;
	} else {
		//alert("email incorrect.");
		return false;
	}
}

function getOs() {
	if (navigator.userAgent.indexOf("MSIE") > 0)
		return 1;
	if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0)
		return 2;
	if (isSafari = navigator.userAgent.indexOf("Safari") > 0)
		return 3;
	if (isCamino = navigator.userAgent.indexOf("Camino") > 0)
		return 4;
	if (isMozilla = navigator.userAgent.indexOf("Gecko/") > 0)
		return 5;
	return 0;
}

function toBreakWord(intLen, id) {
	var obj = document.getElementById(id);
	var strContent = obj.innerHTML;
	var strTemp = "";
	while (strContent.length > intLen) {
		strTemp += strContent.substr(0, intLen) + "<br>";
		strContent = strContent.substr(intLen, strContent.length);
	}
	strTemp += strContent;
	obj.innerHTML = strTemp;
}

function formatActionMessge(responseText) {
	
    var index = responseText.indexOf(':');
    // alert(index);
    var flag = responseText.substring(0, index);
    // alert(flag);
    var message = responseText.substring(index+1, responseText.length);
    
    var messageFormat = new Array();
    
    messageFormat['flag'] = flag;
    
    messageFormat['message'] = message;
    
    return messageFormat;
	
}

function reloadJs(_language) {
	
    var _c=document.getElementsByTagName("SCRIPT");
    
    for (var i=0;i<_c.length;i++) {
    	
        if (_c[i].src) {
            var _s=document.createElement("script");
            _s.type="text/javascript";
            _s.src=_c[i].src;
            _c[0].parentNode.insertBefore(_s,_c[0]);            
            _c[i].parentNode.removeChild(_c[i]);
        }
        else if (_c[i].text) {
        	
            if (_language != undefined) {
            	
                if (window.execScript)
                {
                    window.execScript(_c[i].text,_language);
                }
                else
                {
                    window.eval(_c[i].text,_language);
                }
            }
            else
            {
                if (window.execScript)
                {
                    window.execScript(_c[i].text);
                }
                else
                {
                    window.eval(_c[i].text);
                }
            }
        }
    }
}

function isURL(str) {
	
	var   regUrl = '[a-zA-z]+://[^\s]*';
	var   result = str.match(regUrl);
	return result != null ? true: false;
}

function isNumeric(s){
    if(s!=null){
        var r,re;
        re = /\d*/i; 
        r = s.match(re);
        return (r==s)?true:false;
    }
    return false;
}

// replace all
String.prototype.replaceAll = function(s1,s2){    
	return this.replace(new RegExp(s1,"gm"),s2);    
}  


/* Date/Time Format v0.2; MIT-style license
By Steven Levithan <http://stevenlevithan.com> */

Date.prototype.format = function(mask) {
    var d = this; // Needed for the replace() closure
    
    // If preferred, zeroise() can be moved out of the format() method for performance and reuse purposes
    var zeroize = function (value, length) {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };
    
    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMs])\1?|TT|tt|[lL])\b/g, function($0) {
        switch($0) {
            case 'd':   return d.getDate();
            case 'dd':  return zeroize(d.getDate());
            case 'ddd': return ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'][d.getDay()];
            case 'dddd':    return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d.getDay()];
            case 'm':   return d.getMonth() + 1;
            case 'mm':  return zeroize(d.getMonth() + 1);
            case 'mmm': return ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()];
            case 'mmmm':    return ['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()];
            case 'yy':  return String(d.getFullYear()).substr(2);
            case 'yyyy':    return d.getFullYear();
            case 'h':   return d.getHours() % 12 || 12;
            case 'hh':  return zeroize(d.getHours() % 12 || 12);
            case 'H':   return d.getHours();
            case 'HH':  return zeroize(d.getHours());
            case 'M':   return d.getMinutes();
            case 'MM':  return zeroize(d.getMinutes());
            case 's':   return d.getSeconds();
            case 'ss':  return zeroize(d.getSeconds());
            case 'l':   return zeroize(d.getMilliseconds(), 3);
            case 'L':   var m = d.getMilliseconds();
                    if (m > 99) m = Math.round(m / 10);
                    return zeroize(m);
            case 'tt':  return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT':  return d.getHours() < 12 ? 'AM' : 'PM';
            // Return quoted strings with the surrounding quotes removed
            default:    return $0.substr(1, $0.length - 2);
        }
    });
};