function CounterText(field, cntfield, maxlimit) {
	var obj_field = dom_get_element(field);
	var obj_cntfield = dom_get_element(cntfield);
	if (obj_field.value.length > maxlimit){
        		obj_field.value = obj_field.value.substring(0, maxlimit);
	}
   	else {
       		obj_cntfield.value = maxlimit - obj_field.value.length;
   	}
}
function load_all_profile(form_name, aff_key){
	
	var url = do_link("site.remote", "request=profile&aff_key=" + aff_key);
	
	remote_data_request(url, "", "populate_all_profile_data('" + form_name + "')");
	
}

function populate_all_profile_data(form_name){
	
	var customarray = new Array();
	var customarraykeys = new Array();
	idx=0;
	for (var i in remote_res_profile) {
		customarray[idx] = unescape(remote_res_profile[i]);
		idx++;
	}
	for (var i in remote_res_profile_keys) {
		customarraykeys[i] = unescape(remote_res_profile_keys[i]);
	}
	
	actb_all(document.getElementById('_ACTB_TEXTBOX_'),customarray,customarraykeys);
	
	
}
function MM_swapImgRestore(){ //v3.0
	var i, x, a = document.MM_sr;

	for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) {
		x.src = x.oSrc;
	}
}

function MM_preloadImages(){ //v3.0
	var d = document;
	
	if (d.images) {
		if (!d.MM_p) {
			d.MM_p = new Array();
		}
	
		var i, j = d.MM_p.length, a = MM_preloadImages.arguments;
		
		for (i = 0; i < a.length; i++){
			if (a[i].indexOf("#") != 0) {
				d.MM_p[j] = new Image;
				d.MM_p[j++].src = a[i];
			}
		}
	}
}

function MM_findObj(n, d){ //v4.01
	var p, i, x;
	
	if (!d) {
		d = document;
	}
	
	if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
    		d = parent.frames[n.substring(p + 1)].document;
    		n = n.substring(0, p);
	}
	
  	if (!(x = d[n]) && d.all) {
  		x = d.all[n];
  	}
  	
  	for (i = 0; !x && i < d.forms.length; i++) {
  		x = d.forms[i][n];
  	}
  	
  	for (i = 0; !x && d.layers && i < d.layers.length; i++) {
  		x = MM_findObj(n, d.layers[i].document);
  	}
  
  	if (!x && d.getElementById) {
  		x = d.getElementById(n);
  	}
  	
  	return x;
}

function MM_swapImage(){ //v3.0
	var i, j = 0, x, a = MM_swapImage.arguments;
	
	document.MM_sr = new Array;
	
	for (i = 0; i < (a.length - 2); i += 3) {
   		if ((x = MM_findObj(a[i])) != null) {
   			document.MM_sr[j++] = x;
   			if (!x.oSrc) {
   				x.oSrc = x.src;
   			}
   			x.src = a[i + 2];
   		}
	}
}
function populate_cities(form_name, select_name_states, select_name_cities) {
	
	state_selection = eval("document." + form_name + "." + select_name_states + ".options[document." + form_name + "." + select_name_states + ".selectedIndex].value");
	var url = do_link("site.remote", "request=cities&fk_states=" + state_selection);
	
	remote_data_request(url, "", "populate_cities_data('" + form_name + "', '" + select_name_states + "', '" + select_name_cities + "')");
	
	document.forms[form_name].elements[select_name_cities].options.length = 0;
	document.forms[form_name].elements[select_name_cities].options[0] = new Option("Loading ...", 0);
	document.forms[form_name].elements[select_name_cities].disabled = true;
	
}

function populate_cities_data(form_name, select_name_states, select_name_cities) {

	document.forms[form_name].elements[select_name_cities].disabled = false;
	document.forms[form_name].elements[select_name_cities].options[0] = new Option("--------------", 0);
	idx = 0;	
	for (var i in remote_res_cities) {
		if (remote_res_cities[i] != "") {
			idx ++;
			document.forms[form_name].elements[select_name_cities].options[idx] = new Option(unescape(remote_res_cities[i]), i);
		}
	}
	
}

function populate_states(form_name, select_name_country, select_name_states, select_name_cities) {
	
	country_selection = eval("document." + form_name + "." + select_name_country + ".options[document." + form_name + "." + select_name_country + ".selectedIndex].value");
	var url = do_link("site.remote", "request=states&fk_countries=" + country_selection);
	
	remote_data_request(url, "", "populate_states_data('" + form_name + "', '" + select_name_country + "', '" + select_name_states + "')");
	
	document.forms[form_name].elements[select_name_states].options.length = 0;
	document.forms[form_name].elements[select_name_states].options[0] = new Option("Loading ...", 0);
	document.forms[form_name].elements[select_name_states].disabled = true;
	
	document.forms[form_name].elements[select_name_cities].options.length = 0;
	document.forms[form_name].elements[select_name_cities].options[0] = new Option("-------", 0);
	document.forms[form_name].elements[select_name_cities].disabled = true;
	
}

function populate_states_data(form_name, select_name_country, select_name_states) {

	document.forms[form_name].elements[select_name_states].disabled = false;
	document.forms[form_name].elements[select_name_states].options[0] = new Option("--------------", 0);
	idx = 0;	
	for (var i in remote_res_states) {
		if (remote_res_states[i] != "") {
			idx ++;
			document.forms[form_name].elements[select_name_states].options[idx] = new Option(unescape(remote_res_states[i]), i);
		}
	}
	
}

/* Event Functions */

// Add an event to the obj given
// event_name refers to the event trigger, without the "on", like click or mouseover
// func_name refers to the function callback when event is triggered
function addEvent(obj,event_name,func_name){
	if (obj.attachEvent){
		obj.attachEvent("on"+event_name, func_name);
	}else if(obj.addEventListener){
		obj.addEventListener(event_name,func_name,true);
	}else{
		obj["on"+event_name] = func_name;
	}
}

// Removes an event from the object
function removeEvent(obj,event_name,func_name){
	if (obj.detachEvent){
		obj.detachEvent("on"+event_name,func_name);
	}else if(obj.removeEventListener){
		obj.removeEventListener(event_name,func_name,true);
	}else{
		obj["on"+event_name] = null;
	}
}

// Stop an event from bubbling up the event DOM
function stopEvent(evt){
	evt || window.event;
	if (evt.stopPropagation){
		evt.stopPropagation();
		evt.preventDefault();
	}else if(typeof evt.cancelBubble != "undefined"){
		evt.cancelBubble = true;
		evt.returnValue = false;
	}
	return false;
}

// Get the obj that starts the event
function getElement(evt){
	if (window.event){
		return window.event.srcElement;
	}else{
		return evt.currentTarget;
	}
}
// Get the obj that triggers off the event
function getTargetElement(evt){
	if (window.event){
		return window.event.srcElement;
	}else{
		return evt.target;
	}
}
// For IE only, stops the obj from being selected
function stopSelect(obj){
	if (typeof obj.onselectstart != 'undefined'){
		addEvent(obj,"selectstart",function(){ return false;});
	}
}

/*    Caret Functions     */

// Get the end position of the caret in the object. Note that the obj needs to be in focus first
function getCaretEnd(obj){
	if(typeof obj.selectionEnd != "undefined"){
		return obj.selectionEnd;
	}else if(document.selection&&document.selection.createRange){
		var M=document.selection.createRange();
		try{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}catch(e){
			var Lp=obj.createTextRange();
		}
		Lp.setEndPoint("EndToEnd",M);
		var rb=Lp.text.length;
		if(rb>obj.value.length){
			return -1;
		}
		return rb;
	}
}
// Get the start position of the caret in the object
function getCaretStart(obj){
	if(typeof obj.selectionStart != "undefined"){
		return obj.selectionStart;
	}else if(document.selection&&document.selection.createRange){
		var M=document.selection.createRange();
		try{
			var Lp = M.duplicate();
			Lp.moveToElementText(obj);
		}catch(e){
			var Lp=obj.createTextRange();
		}
		Lp.setEndPoint("EndToStart",M);
		var rb=Lp.text.length;
		if(rb>obj.value.length){
			return -1;
		}
		return rb;
	}
}
// sets the caret position to l in the object
function setCaret(obj,l){
	obj.focus();
	if (obj.setSelectionRange){
		obj.setSelectionRange(l,l);
	}else if(obj.createTextRange){
		m = obj.createTextRange();		
		m.moveStart('character',l);
		m.collapse();
		m.select();
	}
}
// sets the caret selection from s to e in the object
function setSelection(obj,s,e){
	obj.focus();
	if (obj.setSelectionRange){
		obj.setSelectionRange(s,e);
	}else if(obj.createTextRange){
		m = obj.createTextRange();		
		m.moveStart('character',s);
		m.moveEnd('character',e);
		m.select();
	}
}

/*    Escape function   */
String.prototype.addslashes = function(){
	return this.replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g, '\\$1');
}
String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};
/* --- Escape --- */

/* Offset position from top of the screen */
function curTop(obj){
	toreturn = 0;
	while(obj){
		toreturn += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return toreturn;
}
function curLeft(obj){
	toreturn = 0;
	while(obj){
		toreturn += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return toreturn;
}
/* ------ End of Offset function ------- */

/* Types Function */

// is a given input a number?
function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

/* Object Functions */

function replaceHTML(obj,text){
	while(el = obj.childNodes[0]){
		obj.removeChild(el);
	};
	obj.appendChild(document.createTextNode(text));
}
