function parseResponse(response) {
	var result = false;
	
	if(response) {
		var a = response.split('~');
		result = {};
		var pair;
		
		for(i = 0; i < a.length; ++i) {
			pair = a[i].split('=');
			result[pair[0]] = pair[1];
		}
	}
	
	return result;
}


function __(element_id) {
	return document.getElementById(element_id);	
}

function getViewportHeight() {
	if (typeof window.innerWidth != 'undefined') {
		viewportheight = top.innerHeight;
	} else {
		viewportheight = top.document.documentElement.clientHeight;
	}
	
	return viewportheight;
}
function getViewportWidth() {
	if (typeof window.innerWidth != 'undefined') {
		viewportwidth = top.innerWidth;
	} else {
		viewportwidth = top.document.documentElement.clientWidth;
	}
	
	return viewportwidth;
}

function setBlanketHeight() {
	// set blanket height
	var viewportheight = getViewportHeight();
	//alert('viewport height: ' + viewportheight + "\nclientHeight: " + document.body.parentNode.clientHeight + "\nscrollHeight: " + document.body.parentNode.scrollHeight);
	//if (viewportheight > top.document.body.parentNode.scrollHeight && viewportheight > top.document.body.parentNode.clientHeight) {
	if (viewportheight > top.document.body.parentNode.scrollHeight) {
		blanket_height = viewportheight;
	} else {
		if (top.document.body.parentNode.clientHeight > top.document.body.parentNode.scrollHeight) {
			blanket_height = top.document.body.parentNode.clientHeight;
			//alert('clientHeight is greater than scrollHeight');
		} else {
			blanket_height = top.document.body.parentNode.scrollHeight;
			//alert('scrollHeight is greater than clientHeight');
		}
	}
	top.document.getElementById('blanket').style.height = String(blanket_height) + 'px';
}

function popup(windowname,formname,show) {
	// reset form fields
	if(formname != '' && show) {
		var f = document[formname];
		current_form_name = formname;
		f.reset();
		f.referrer.value = window.location.href;
		f.elements[0].focus();
	}
	
	//document.getElementById('blanket').style.height = String(document.body.parentNode.scrollHeight) + 'px';
	if(show) {
		setBlanketHeight();
		current_popup_id = windowname;
		window.onkeypress = function (e) {
			// close the popup if the user presses the ESC key
			if(e.keyCode == 27) { // escape key
				cancel(current_popup_id);
				return false;
			}
			
			// move the focus to the serial number field if an asterisk is pressed
			else if(e.charCode == 42) { // asterisk
				var sn_field = document[current_form_name]['sn'];
				if(sn_field && sn_field.type == 'text') {
					if(sn_field.value) {
						sn_field.select();
					}
					else {
						sn_field.focus();
					}
					return false;
				}
			}
			return true;
		};
	}
	
	else {
		current_popup_id = null;	
		current_form_name = null;
		return_popup_id = null;
		return_callback = null;
	}
	
	var disp = (show ? 'block' : 'none');
	document.getElementById('blanket').style.display = disp; // show transparency layer
	//if(document.getElementById(String(windowname) + 'BG') != null)
	//	document.getElementById(String(windowname) + 'BG').style.display = disp; // show background image div
	document.getElementById(windowname).style.display = disp; // show popup content div
}
function popupSwitch(from, to, revertCallBack) {
	document.getElementById(from).style.display = 'none';
	//if(document.getElementById(String(from) + 'BG') != null) 
	//	document.getElementById(String(from) + 'BG').style.display = 'none';
	//if(document.getElementById(String(to) + 'BG') != null) 
	//	document.getElementById(String(to) + 'BG').style.display = 'block';
	document.getElementById(to).style.display = 'block';
	current_popup_id = to;
	return_popup_id = from;
	current_form_name = document.getElementById(current_popup_id).parentNode.name;
}

function popupRevert() {
	document.getElementById(current_popup_id).style.display = 'none';
	document.getElementById(return_popup_id).style.display = 'block';
	current_popup_id = return_popup_id;
	return_popup_id = null;
	current_form_name = document.getElementById(current_popup_id).parentNode.name;
	if(return_callback != null) {
		return_callback();
	}
}

// auto-tab to next input
function tab(el, event) {
	// enter key
	/*if(event.keyCode == 13) {
		if(el.form.onsubmit()) {
			el.form.submit();
		}
	}*/
	
	// escape key
	if(event.keyCode == 27) {
		cancel(current_popup_id);
	}
	
	// if key pressed was not the tab key or shift key
	else if(event.keyCode != 9 
				&& event.keyCode != 16 
				&& el.type == 'text' 
				&& el.value.length == el.maxLength) { 
		var prev = el;
		var index = -1;
		// find next form element
		for(i = 0; i < el.form.elements.length - 1; ++i) {
			if(el.id == el.form.elements[i].id) {
				index = i;
				break;
			}
		}
		if(index > -1) {
			el = el.form.elements[index + 1];

			if((el.tagName == 'INPUT' || el.tagName == 'TEXTAREA') 
				 && el.value != '') {
				el.select();
			}
			else {
				el.focus();	
			}
		}
	}
	
	return true;
}

function checkKey(el, event, callback) {
	if(event.keyCode == 13 || event.keyCode == 9) {
		var callback_result = eval(callback);
		var prev = el;
		var index = -1;
		
		// find next form element
		//if(callback_result) {
			for(i = 0; i < el.form.elements.length - 1; ++i) {
				if(el.id == el.form.elements[i].id) {
					index = i;
					break;
				}
			}
			if(index > -1) {
				el = el.form.elements[index + 1];
	
				if((el.tagName == 'INPUT' || el.tagName == 'TEXTAREA') 
					 && el.value != '') {
					el.focus();	
					el.select();
				}
				else {
					el.focus();	
				}
			}
		/*}
		
		else {
			el.focus();
			//el.select();
			//return false;
		}*/
	}
	
	// escape key
	else if(event.keyCode == 27) {
		cancel(current_popup_id);
	}
	
	return true;
}

function cancel(popup_div_id) {
	if(return_popup_id != null) {
		popupRevert();
	}
	else {
		popup(popup_div_id, false);
	}
}

function cleanupFloat(v, decimals) {
	v = parseFloat(v);
	if(decimals == null) {
		decimals = 2;
	}
	
	if(isNaN(v)) {		
		v = '0';
	}
	else {
		v = v.toFixed(decimals);
	}
	
	return v;
}

function cleanupPhone(v) {
	var return_value = '';
	v = String(v);
	
	for(i = 0; i < v.length; ++i) {
		if(v.charAt(i) && !isNaN(v.charAt(i))) {
			return_value += v.charAt(i);
		}
	}
	if(return_value[0] == '1') {
		return_value = return_value.substr(1, return_value.length - 2);	
	}
	if(return_value.length >= 10) {
		return_value = return_value.substr(0,3) + '-' + return_value.substr(3,3) + '-' + return_value.substr(6,4);
	}
	
	return return_value;
}

function cleanupZIP(v) {
	var return_value = '';
	v = String(v);
	
	for(i = 0; i < v.length; ++i) {
		if(!isNaN(v.charAt(i)) && v.charAt(i) != ' ') {
			return_value += v.charAt(i);
		}
	}

	if(return_value.length >= 9) {
		return_value = return_value.substr(0,5) + '-' + return_value.substr(4,4);
	}
	
	return return_value;
}

function cleanupSSN(v) {
	var return_value = '';
	v = String(v);
	
	for(i = 0; i < v.length; ++i) {
		if(!isNaN(v.charAt(i)) && v.charAt(i) != ' ') {
			return_value += v.charAt(i);
		}
	}

	if(return_value.length >= 9) {
		return_value = return_value.substr(0,3) + '-' + return_value.substr(3,2) + '-' + return_value.substr(5,4);
	}
	
	return return_value;
}

function cleanupInt(v) {
	v = parseInt(v);
	
	if(isNaN(v)) {
		v = 0;
	}
	
	return Math.abs(v);
}
function isNumericWithDashes(v) {
	v = String(v);
	var return_value = true;
	for(i = 0; i < v.length; ++i) {
		if(isNaN(v.charAt(i)) && v.charAt(i) != '-') {
			return_value = false;
			break;
		}
	}
	return return_value;
}

function removeMenuOptions(form_name, menu_name) {
	var menu = document[form_name][menu_name];
	
	if(menu && menu.options) {
		for(i = menu.options.length; i >= 0; --i) {
			menu.remove(menu.options[i]);
		}
	}
}

function addMenuOption(form_name, menu_name, option_value, option_text) {
	var menu = document[form_name][menu_name];

	if(menu) {
		var index = menu.options.length;
		var o = new Option(option_text, option_value);
		menu.options[index] = o;
	}
}

function insertMenuOption(form_name, menu_name, option_value, option_text, index) {
	var menu = document[form_name][menu_name];

	if(menu) {
		var o = new Option(option_text, option_value);
		var l = menu.options.length - 1;
		for(i = l; i >= index; --i) {
			if(!menu.options[i + 1]) {
				var o2 = new Option(menu.options[i].text, menu.options[i].value); 
				menu.options[i + 1] = o2;	
			}
			else {
				menu.options[i + 1].text = menu.options[i].text;
				menu.options[i + 1].value = menu.options[i].value;
			}
		}
		menu.options[index] = o;
	}
}

function removeMenuOption(form_name, menu_name, index) {
	var menu = document[form_name][menu_name];

	if(menu && menu.options.length >= index) {
		/*var l = menu.options.length
		for(i = index; i < l; ++i) {
			if(i < l - 1) {
				menu.options[i] = menu.options[i + 1];
			}
			else {*/
				menu.remove(menu.options[index]);
			/*}
		}*/
	}
}

function toggleFormFields(form, excluded, enabled) {
	var enabled = (enabled ? true : false);
	if(excluded) {
		var exc_el = form[excluded];
	}
	for(i = 0; i < form.elements.length; ++i) {
		var el = form.elements[i];
		if(el) {
			if(!exc_el || (exc_el && el.name != exc_el.name)) {
				el.disabled = (!enabled);
			}
		}
	}
}

function nl2br(s) {
	return s.replace(/\n/g, '<br/>');	
}

// translates input text values
// so that necessary delimiters are not used
// tilde -> hyphen
// equal -> colon
function stripDelimiters(f) {
	if(f) {
		for(i = 0; i < f.elements.length; ++i) {
			var el = f.elements[i];
			
			if(el.type == 'text' || el.type == 'textarea') {
				var new_value = String(el.value).replace(/~/g, '-');
				new_value = new_value.replace(/=/g, ':');
				new_value = new_value.replace(/#/g, '_');
				el.value = new_value;
			}
		}
	}
}

// generic function to get the value of a cookie based on the parameter name
function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) { 
			c_start=c_start + c_name.length+1; 
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		} 
	}
	return false;
}