//Various utilities for the main site

/*****************************************
	highlights selected input field
*****************************************/
document.observe('dom:loaded', function() {

	$$('input').each(
		function(el){
			
			if (el.readAttribute('type') != 'text' && el.readAttribute('type') != 'textarea'){
				return false;
			}
			else{
				el.onfocus = function() {
					el.addClassName('focus');	
					el.removeClassName('blur');					
					
					if (el.readAttribute('readonly')){
						el.select();
					}
								
				}
			
				el.onblur = function(){
			
					el.addClassName('blur');
					el.removeClassName('focus');
			
				}
			}
		});
		
	$$('textarea').each(
		function(el){
				
			el.onfocus = function() {
					el.addClassName('focus');	
					el.removeClassName('blur');	
					
					if (el.readAttribute('readonly')){
						el.select();
					}
			}
			
			el.onblur = function(){
				el.addClassName('blur');
				el.removeClassName('focus');
			}
			
	});
	
	$$('select').each(
		function(el){
				
			el.onfocus = function() {
				el.addClassName('focus');	
				el.removeClassName('blur');			
			}
			
			el.onblur = function(){
				el.addClassName('blur');
				el.removeClassName('focus');
			}
			
	});

});

/*****************************************
	Implemented instead of generic resets
*****************************************/
cancelConfirm	= function (formName){
  if (confirm("Are you sure you want to clear the form?"))
   {
      $(formName).reset();
   }
  return true;
}


/*****************************************
	generic ajax updater
*****************************************/

load_div = function(url,targetDiv,loadMessage,failMessage){

	//default image/text
	loadMessage = loadMessage || '<div style="width: 100%; text-align: center; height: 250px;" ><br /><br /><br /><br /><br /><br /><img src="/images/ajax-loader7.gif" /></div>';
	failMessage = failMessage || "Report Load Error:";
	
	$(targetDiv).innerHTML = loadMessage;
	
	new Ajax.Updater(targetDiv,url, {
		method: 'GET',
		onSuccess: function (transport) {
			$(targetDiv).innerHTML = transport.responseText;
		},
		onFailure: function (transport){
			$(targetDiv).innerHTML=failMessage + "\n" + transport.statusText;
		}
	});
}

/*****************************************
	JS version similar to PHP's in_array. usage example: arrayName.contains('index')
*****************************************/
Array.prototype.contains = function (needle) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == needle) {
			return true;
		}
	}
	return false;
}

/*****************************************
	msg is the message sent, type is either 0 (Error) or 1 (Success)
*****************************************/
flash = function (msg,type,save) {
	if (save == null) {
		save = true;
	}
	
	var el = $('flash');
	
	if (type == 1 || type == null) {
		if (el.hasClassName('flashError')) {
			el.removeClassName('flashError');
		}
		el.addClassName('flashSuccess');
		new Effect.Highlight(el,{startcolor: '#00FF00', endcolor: '#CDEB8B', restorecolor: '#CDEB8B'});
	} else if (type == 0) {
		if (el.hasClassName('flashSuccess')) {
			el.removeClassName('flashSuccess');
		}
		el.addClassName('flashError');
		new Effect.Highlight(el,{startcolor: '#CB2127', endcolor: '#000000', restorecolor: '#000000'});
	}
	
	el.update(msg);
	
	if (save) {
		el.parentNode.innerHTML = el.parentNode.innerHTML;
	}
	$('flash').show();
	
	return true;
}

removeFlash = function () {
	$('flash').update();
	$('flash').classNames().each(function(n) { $('flash').removeClassName(n); });
}


/*****************************************
	This will return a string formatted with commas. ie (1,000,000.87) 
*****************************************/

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

//I think these joinMem functions could possibly be moved into the files that actually use them..vs here because I believe that only those specific pages use these

//Show Affiliate Details in Merchant Interface
function joinMem1(userid){
	var loc='viewmember.php?usr_id='+userid;
	var win = window.open(loc,"viewmember","menubar=0,resizable=0,width=780,height=600,scrollbars=yes,status=no");

}


function showElem(element){
	changeDisplay('hidden');
	element.style.visibility = 'visible';
}

function hideElem(element){
	changeDisplay('visible');
	element.style.visibility = 'hidden';
}

function repos(obj,divobj,divheight,divwidth){
	var curX = findPosX(obj);
	var curY = findPosY(obj);
	var newX = 0;
	var newY = 0;
	var loca = document.documentElement.scrollTop;	
	var locb = document.body.scrollTop;
	
	if((loca+divheight > newY) || (locb+divheight > newY)){
		newY = curY;
	}else{
		newY = newY-(divheight+5);
	}

	if(document.body.offsetWidth-(curX+divwidth) < 0){
		newX = curX-divwidth;
	}else if((curX-divwidth) < 0){
		newX = curX+10;
	}else{
		newX = curX;
	}
	
	
	divobj.style.top = newY + 'px';
	divobj.style.left = newX + 'px';
}


function findPosX(obj){
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}else{
		if (obj.x)
			curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj){
	var curtop = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}else{
		if (obj.y)
			curtop += obj.y;
	}
	return curtop;
}

function dynamicdiv(url,target) {
    // native XMLHttpRequest object
    document.getElementById(target).innerHTML = 'Loading...';
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = function() {dynamicdivDone(target);};
        req.open("GET", url, true);
        req.send(null);
    // IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = function() {dynamicdivDone(target);};
            req.open("GET", url, true);
            req.send();
        }
    }
}   

function dynamicdivDone(target) {
    // only if req is "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            results = req.responseText;
            document.getElementById(target).innerHTML = results;
        } else {
            document.getElementById(target).innerHTML="Load Error:\n" +
                req.statusText;
        }
    }
}

function changeDisplay(as_display){
// Hide the drop downs so they don't show through the pop up window.
	var lobj_collection = document.getElementsByTagName("SELECT");
	for (var i = 0; i < lobj_collection.length; i++) {
		lobj_collection(i).style.visibility = as_display;
	}
}

/* HELP SYSTEM FUNCTIONS - END*/

function openWindow (url,name,params) {
	var newwin = window.open(url,name,params);
	
	if (window.focus) {
		newwin.focus();
	}
	
	return false;
}


