function resetMessageContainers() {
	try {
		// simon: if clear popupForm, form in popupForm will not get submitted in IE6.
    //document.getElementById("popupForm").innerHTML = "";
    document.getElementById("popupBG").style.display = "none";
	} catch (e) {}
	try {
		document.getElementById("desatoPopupInfoContainer").innerHTML = "";
		document.getElementById("desatoPopupInfoContainer").style.display = "none";
	} catch (e) {}	
	try {
		document.getElementById("desatoPopupErrorContainer").innerHTML = "";
		document.getElementById("desatoPopupErrorContainer").style.display = "none";
	} catch (e) {}	
	try {
		document.getElementById("desatoInfoContainer").innerHTML = "";
		document.getElementById("desatoInfoContainer").style.display = "none";
	} catch (e) {}
	try {
		document.getElementById("desatoErrorContainer").innerHTML = "";
		document.getElementById("desatoErrorContainer").style.display = "none";
	} catch (e) {}
	try {
		document.getElementById("desatoAjaxDebugContainer").innerHTML = "";
		document.getElementById("desatoAjaxDebugContainer").style.display = "none";
	} catch (e) {}
}
function loggingDebug(msg) {
	if (isAjaxDebug && isUseAjax) {
		var messageContainer = document.getElementById("desatoAjaxDebugContainer");
		messageContainer.innerText += msg;
		messageContainer.style.display = "block";
	}
}
function showMessage(divId, msg) {
	try {
		var messageContainer = document.getElementById(divId);
		messageContainer.innerHTML += msg;
	} catch (e) {}
}
function message(msg) {
	showMessage("desatoInfoContainer", msg);
}
function errorMessage(msg) {
	showMessage("desatoErrorContainer", msg);
}
function popUpMessage(msg) {
	showMessage("desatoPopupErrorContainer", msg);
}
function popupErrorMessage(msg) {
	showMessage("desatoPopupErrorContainer", msg);
}
function getHTTPRequest() {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      return http_request;
}
function hideDiv(id) {
	try {
		var div = document.getElementById(id);
		div.style.display = "none";
		var divForm = document.getElementById('popupForm');
		divForm.innerHTML = "";
	} catch (e) {}
}
function getPopupForm(id, url) {
	if (!isUseAjax) return;
	loggingDebug("ajax getPopupForm="  + id + " -- calling <br>");
	updateElementsCount = 1;
	var http = getHTTPRequest();
	http.open("GET", url, true);
	http.onreadystatechange = function() {
	  if (http.readyState == 4) {
		document.getElementById(id).innerHTML = http.responseText;
		openPopup(id);
		updateElementsCount--;
		if (updateElementsCount == 0) {
			isAjaxSubmitting = false;
			//submitForm(document.dummyForm);
		}
		loggingDebug("ajax getPopupForm=["  + id + ":" +  http.responseText + "] -- done<br>");
	  }
	}
  	http.send(null);
}

function updateElement(id, url) {
	if (!isUseAjax) return;
	loggingDebug("ajax updateElement="  + id + " -- calling <br>");
	var http = getHTTPRequest();
	http.open("GET", url, true);
	http.onreadystatechange = function() {
	  if (http.readyState == 4) {
	  
		if (http.responseText.indexOf("EvalDesatoScript") >= 0) {
			eval(http.responseText);
		} else {
			document.getElementById(id).innerHTML = http.responseText;
		}
		openPopup(id);
		updateElementsCount--;
		if (updateElementsCount <= 0) {
			isAjaxSubmitting = false;
			
			//submitForm(document.dummyForm);
		}
		loggingDebug("ajax updateElement=["  + id + ":" +  http.responseText + "] -- done<br>");
	  }
	}
  	http.send(null);
}

function updateElementAndExecScript(id, url) {
    loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
    var http = getHTTPRequest();
    http.open("GET", url, true);
    http.onreadystatechange = function() {
      if (http.readyState == 4) {
        loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
        if (document.getElementById(id) != null) {
            document.getElementById(id).innerHTML = http.responseText;
            var scripts = document.getElementById(id).getElementsByTagName("script");
	        for(var i=0;i<scripts.length;i++)  
	        {  
	            eval(scripts[i].text);
	        }
        }
      }
    }
    http.send(null);
}


var facetHTML = '\
<table border="0" cellspacing="0" cellpadding="0"><tr>\
	<td valign="top">\
		<a onclick=\'updateDisplayFrame("<url>");return false;\'><img src="imgs/search/selectIcon.jpg" border="0" style="margin: 3pt 3pt 3pt 0pt;" /></a>\
	</td>\
	<td valign="top">\
		<span class="facetValues"><a onclick=\'updateDisplayFrame("<url>");return false;\'><facetName></a>&nbsp;<span class="total">(<facetNumber>)</span></span>\
	</td>\
</tr></table>';




var zeroFacetHTML = '\
<table border="0" cellspacing="0" cellpadding="0"><tr>\
	<td valign="top">\
		<img src="imgs/search/selectIcon.jpg" border="0" style="margin: 3pt 3pt 3pt 0pt;" />\
	</td>\
	<td valign="top">\
		<span class="facetValues"><facetName>&nbsp;<span class="total">(0)</span></span>\
	</td>\
</tr></table>';

var facetRequestTime;


function updateFacetNumberElement(id, url, facetName, time) {

	//alert(id + "\n" + url + "\n" + facetName + "\n" + facetRequestTime + "\n" +  time);


    loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
    var http = getHTTPRequest();
    http.open("GET", url, true);
    http.onreadystatechange = function() {
      if (http.readyState == 4) {
        loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
        if (document.getElementById(id) != null && facetRequestTime==time) {
			if (http.responseText == 0)
            	document.getElementById(id).innerHTML = zeroFacetHTML.replace('<facetName>', facetName.replace(/[+]/g, " "));
            else 
            	document.getElementById(id).innerHTML = 
            		document.getElementById(id).innerHTML
            		.replace("---", http.responseText.replace(/^\s+|\s+$/g,""));
            
            
        }
      }
    }
    http.send(null);

}

function updateFacetNumber(url) {
	var query = "";

	try {
		query = url.split("?")[1];
	} catch (e) {}
	
	var addFacet = ""
	if (query.length > 0 && query.indexOf('addFacet') > 0) {
		addFacet = query.substring(query.indexOf('addFacet=') + 9);
		if (addFacet.indexOf("&") > 0 )
			addFacet = addFacet.substring(0, addFacet.indexOf("&"));
		
		if (addFacet.length > 0) {
			
			//alert(addFacet);
			query = query.replace("&addFacet=" + addFacet + "&", "");
			query = query.replace("&addFacet=" + addFacet, "");
			query = query.replace("addFacet=" + addFacet, "");
			
			addFacet += ":";
		
		}
	}
	
	
	url = '/cyberswim/includes/ajax/addFacetQuery.jsp' + '?' + query;
	
	facetRequestTime = new Date();
	
	updateNumber = 100;
	
    var out = "";
 	var intList = document.getElementsByTagName("li");
		for (var i=0; i<intList.length; i++) {
			if (intList[i].id.indexOf("ajax:")>=0) {
				out += intList[i].id.substring(5) + "\n";
			
				if (updateNumber > 0) {
					var facetName = intList[i].id.substring(5);
					facetName = facetName.substring(facetName.indexOf(":") + 1);
					facetName = facetName.replace(/[+]/g, " ");
					var link = url + "&addFacet=" + addFacet + intList[i].id.substring(5);
				
					updateFacetNumberElement(intList[i].id, link, facetName, facetRequestTime);
					updateNumber--
				}
				
				
				
			}
			
			/**
			if (intList[i].className.toLowerCase().indexOf("integer")<0) continue;
			
			var intValue = new Number(intList[i].value);
			if (!intValue || isNaN(intValue) || intValue<1) {
				this.invalidList[this.invalidList.length] = new formNode(intList[i],intList[i].style.borderColor,intList[i].style.backgroundColor,intList[i].style.color);
				intList[i].style.borderColor = "#FF0000";
				intList[i].style.backgroundColor = "#FF9999";
				intList[i].style.color = "#FF0000";
				if (pass) pass = false;
			} else {
				intList[i].value=intValue;
				for (var j=0; j<this.invalidList.length; j++) {
					if (intList[i]==this.invalidList[j].getNode()) {
						this.invalidList[j].applyColorSet();
						this.invalidList[j]==null;
					}
				}
			}
			*/
		}
	        
	    //alert(url+"\n"+out);

}

function updateFacetOption(id, url) {

    loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
    var http = getHTTPRequest();
    http.open("GET", url, true);
    http.onreadystatechange = function() {
      if (http.readyState == 4) {
        loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
        if (document.getElementById(id) != null) {
            document.getElementById(id).innerHTML = http.responseText;
            updateFacetNumber(url);
        }
      }
    }
    http.send(null);
}

function updateProductList(id, url) {
    loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
    var http = getHTTPRequest();
    http.open("GET", url, true);
    http.onreadystatechange = function() {
      if (http.readyState == 4) {
        loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
        if (document.getElementById(id) != null) {
            document.getElementById(id).innerHTML = http.responseText;
        }
      }
    }
    http.send(null);
}









function updateElementByJavascript(id, url) {
	loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
	var http = getHTTPRequest();
	http.open("GET", url, true);
	http.onreadystatechange = function() {
	  if (http.readyState == 4) {
	  	loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
	  	if (document.getElementById(id) != null) {
	  		document.getElementById(id).innerHTML = 
	  			document.getElementById(id).innerHTML.replace("---", http.responseText != null ? http.responseText.replace(/^\s+|\s+$/g,"") : http.responseText);
	  	}
	  }
	}
  	http.send(null); 	
}

function updateElementByJavascript2(id, url) {
    loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
    var http = getHTTPRequest();
    http.open("GET", url, true);
    http.onreadystatechange = function() {
      if (http.readyState == 4) {
        loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
        if (document.getElementById(id) != null) {
            document.getElementById(id).innerHTML = 
                document.getElementById(id).innerHTML.replace("---", http.responseText != null ? http.responseText.replace(/^\s+|\s+$/g,"") : http.responseText);
            if(http.responseText.replace(/^\s+|\s+$/g,"") != '0')
                document.getElementById(id).style.display = '';
        }
      }
    }
    http.send(null);    
}

function updateElementByJavascript3(id, url) {
    loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
    var http = getHTTPRequest();
    http.open("GET", url, true);
    http.onreadystatechange = function() {
      if (http.readyState == 4) {
        loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
        if (document.getElementById(id) != null) {
            if(http.responseText.replace(/^\s+|\s+$/g,"") != '0')
                document.getElementById(id).style.display = '';
        }
      }
    }
    http.send(null);    
}


function updateProductSizeColor(id, url) {
	loggingDebug("ajax updateElementByJavascript="  + url + " -- calling <br>");
	var http = getHTTPRequest();
	http.open("POST", url, true);
	
	loadingBox('System is verifing your request, please wait.');
	controlAllSelect(0);
	http.onreadystatechange = function() {
	  if (http.readyState == 4) {
	  	loggingDebug("ajax updateElementByJavascript=["  + url + ":" +  http.responseText + "] -- done<br>");
	  	if (document.getElementById(id) != null) {
	  		document.getElementById(id).innerHTML = http.responseText;
	  		closePopup('popupBG'); controlAllSelect(1); resetOpacity();
	  	}
	  }
	}
  	http.send(null); 	
}




function updateElementFunc(id, url, func) {
	if (!isUseAjax) return;
	loggingDebug("ajax updateElement="  + id + " -- calling <br>");
	var http = getHTTPRequest();
	http.open("GET", url, true);
	http.onreadystatechange = function() {
	  if (http.readyState == 4) {
		document.getElementById(id).innerHTML = http.responseText;
		openPopup(id);
		updateElementsCount--;
		if (updateElementsCount <= 0) {
			isAjaxSubmitting = false;
			eval(func);
		}
		loggingDebug("ajax updateElement=["  + id + ":" +  http.responseText + "] -- done<br>");
	  }
	}

  	http.send(null);
  	
}


function updateElements(form) {
	if (!isUseAjax) return;
	try {
		updateElementsCount = ajaxUpdateMap[form.name].length;
	} catch (e) {
		isAjaxSubmitting = false;
		updateElementsCount = 0;
		loggingDebug("> no element requseted to update.<br>");
		return;
	}
	loggingDebug("> updating elements were requested to update...<br>");
	for (var i=0; i < ajaxUpdateMap[form.name].length; i++) {
		var id = ajaxUpdateMap[form.name][i];
		var url = ajaxUpdateMap[form.name][id];
		loggingDebug("&nbsp;&nbsp;&nbsp;element("+ i +") = [id=" + id + ", url=" + url + "]<br>");
		updateElement(id, url);
	}
}
function submitFormWithURL(formOrFormId, divId, url) {
	var form = formOrFormId;
	if (isAjaxSubmitting) {
		loggingDebug("Another ajax request running - wait please<br>");
		return;
	} else {
		if (typeof formOrFormId == "string") {
			loggingDebug("inputed from is a string<br>");
			form = document.getElementById(formOrFormId);
		}
		resetMessageContainers();
		loggingDebug("processing form=" + form.name + "<br>");
		loggingDebug("sending request to url=" + url + "<br>");
	}
	if (isUseAjax) {
		loggingDebug("ajax icon for fun <img src='imgs/desato_loading_16x16.gif' /><br><br>");
		var httpRequest = getHTTPRequest();
		
		if (!httpRequest) {
			loggingDebug("browser or javascript not support ajax - using normal form submit");
			form.submit();
			return;
		}
		
		isAjaxSubmitting = true;
		
		

		
		var postString = "";
		var debugMsg = "";
		for (var n=0; n < form.elements.length; n++) {
			debugMsg += n + ":" + form.elements[n].name + "=<b>" + form.elements[n].value  + "</b><br>";
			postString += form.elements[n].name + "=" + escape(encodeURI(form.elements[n].value)) + (n==form.elements.length-1?"":"&");
		}
		loggingDebug("cookie - " +  document.cookie + "<br>");
		loggingDebug("The elements in the form '" + form.name + "' are:<br>" + debugMsg +"<br>" + "post string=" + postString + "<br><br>");
		httpRequest.onreadystatechange = function() {
			if (httpRequest.readyState == 4) {
				loggingDebug("result script=" + httpRequest.responseText + "<br>");
				if (divId == null || httpRequest.responseText.indexOf("EvalDesatoScript") >= 0) {
					eval(httpRequest.responseText);
				} else {
					document.getElementById(divId).innerHTML = httpRequest.responseText;
					openPopup(divId);
				}
				try {
					updateElements(form);
				} catch (e) {}
				
//  if (xmlhttp.status==200) alert("URL Exists!")
//    else if (xmlhttp.status==404) alert("URL doesn't exist!")
//     else alert("Status is "+xmlhttp.status)
			}
		}
		httpRequest.open('POST', url, true);
		httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		httpRequest.setRequestHeader("Cookie", document.cookie+"");
		httpRequest.setRequestHeader("Connection", "close");
		httpRequest.setRequestHeader("Content-length", postString.length);
		httpRequest.send(postString);
	} else {
		loggingDebug("trying normal sumbit...you can not see this message anyway<br>");
		form.submit();
	}
}
function submitForm(form) {
	submitFormWithURL(form, null, "includes/form/submit.jsp?");
}

function refresh() {
document.location.href=document.location.href;
}

function formFunction(func){
	if(func=="shipping"){
		type = document.getElementById('shippingAddressType').value;
		city = document.getElementById('shippingCity').value;
		state = document.getElementById('shippingState').value;
		country = document.getElementById('shippingCountry').value;
		func = "setShippingAddress(\'"+type+"\',\'"+city+"\',\'"+state+"\',\'"+country+"\');"
	}else if(func=="billing"){
		type = document.getElementById('billingAddressType').value;
		city = document.getElementById('billingCity').value;
		state = document.getElementById('billingState').value;
		country = document.getElementById('billingCountry').value;
		func = "setBillingAddress(\'"+type+"\',\'"+city+"\',\'"+state+"\',\'"+country+"\');"				
	}
	return func; 
}

function submitFormWithURLFunc(formOrFormId, divId, url, func) {
	var form = formOrFormId;
	if (isAjaxSubmitting) {
		loggingDebug("Another ajax request running - wait please<br>");
		return;
	} else {
		if (typeof formOrFormId == "string") {
			loggingDebug("inputed from is a string<br>");
			form = document.getElementById(formOrFormId);
		}
		resetMessageContainers();
		loggingDebug("processing form=" + form.name + "<br>");
		loggingDebug("sending request to url=" + url + "<br>");
	}
	if (isUseAjax) {
		loggingDebug("ajax icon for fun <img src='imgs/desato_loading_16x16.gif' /><br><br>");
		var httpRequest = getHTTPRequest();
		
		if (!httpRequest) {
			loggingDebug("browser or javascript not support ajax - using normal form submit");
			form.submit();
			return;
		}
		
		isAjaxSubmitting = true;
		
		func = formFunction(func);		
			
		
		var postString = "";
		var debugMsg = "";
		for (var n=0; n < form.elements.length; n++) {
			debugMsg += n + ":" + form.elements[n].name + "=<b>" + form.elements[n].value  + "</b><br>";
			postString += form.elements[n].name + "=" + escape(encodeURI(form.elements[n].value)) + (n==form.elements.length-1?"":"&");
		}
		loggingDebug("cookie - " +  document.cookie + "<br>");
		loggingDebug("The elements in the form '" + form.name + "' are:<br>" + debugMsg +"<br>" + "post string=" + postString + "<br><br>");
		httpRequest.onreadystatechange = function() {
			if (httpRequest.readyState == 4) {
				loggingDebug("result script=" + httpRequest.responseText + "<br>");
				if (divId == null || httpRequest.responseText.indexOf("EvalDesatoScript") >= 0) {
					eval(httpRequest.responseText);
				} else {
					document.getElementById(divId).innerHTML = httpRequest.responseText;
					openPopup(divId);
				}
				
				
				try {
					updateElements(form);
				} catch (e) {}
				
				eval(func);
				
//  if (xmlhttp.status==200) alert("URL Exists!")
//    else if (xmlhttp.status==404) alert("URL doesn't exist!")
//     else alert("Status is "+xmlhttp.status)
			}
		}
		httpRequest.open('POST', url, true);
		httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		httpRequest.setRequestHeader("Cookie", document.cookie+"");
		httpRequest.setRequestHeader("Connection", "close");
		httpRequest.setRequestHeader("Content-length", postString.length);
		httpRequest.send(postString);
	} else {
		loggingDebug("trying normal sumbit...you can not see this message anyway<br>");
		form.submit();
	}
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}

function changeElementView(view) {
  //alert(view);
  createCookie("view", view, 7);
  
 // updateElement("productsDisplayFrame", "");
}

function changeElementSort(sort) {
  //alert(view);
  createCookie("sort", sort, 7);
  
 // updateElement("productsDisplayFrame", "");
}


function changeElementPerPage(view) {
  var altView = view=='all' ? 'page' : 'all';
  createCookie("view", altView, 7);
  
  //updateElement("productsDisplayFrame", "includes/productsDisplayFrame.jsp?"+"catId="+"<%=catId%>"+"&view="+altView+"&page="+1);
}

function ismaxlength(obj){
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
	if (obj.getAttribute && obj.value.length>mlength)
	    obj.value=obj.value.substring(0,mlength)
}

function setPreFabMsg(index) {
  var msgs = new Array();
  msgs[0] = "I saw this and thought of you.";
  msgs[1] = "This could be just what you've been looking for.";
  msgs[2] = "Look at the great swimsuit I found at Cyberswim.";
  document.getElementById('preFabMsg').value=msgs[index];
  document.getElementById('preFabMsgId').value=index;
}

function submitAddCompareFormWithURL(formOrFormId, url, elementId) {
    var form = formOrFormId;
    if (typeof formOrFormId == "string") {
        form = document.getElementById(formOrFormId);
    }
    if (isUseAjax) {
        var httpRequest = getHTTPRequest();
        
        if (!httpRequest) {
            form.submit();
            return;
        }
        
        var postString = "";
        for (var n=0; n < form.elements.length; n++) {
            postString += form.elements[n].name + "=" + escape(encodeURI(form.elements[n].value)) + (n==form.elements.length-1?"":"&");
        }
        httpRequest.onreadystatechange = function() {
            if (httpRequest.readyState == 4) {
                eval(httpRequest.responseText.replace(/ID_PLACE_HOLDER/g, elementId));
            }
        }
        httpRequest.open('POST', url, true);
        httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        httpRequest.setRequestHeader("Cookie", document.cookie+"");
        httpRequest.setRequestHeader("Connection", "close");
        httpRequest.setRequestHeader("Content-length", postString.length);
        httpRequest.send(postString);
    } else {
        loggingDebug("trying normal sumbit...you can not see this message anyway<br>");
        form.submit();
    }
}

function submitFormWithURL2(formOrFormId, divId, url) {
    var form = formOrFormId;
    if (typeof formOrFormId == "string") {
        form = document.getElementById(formOrFormId);
    }
    
    if (isUseAjax) {
        var httpRequest = getHTTPRequest();
        
        if (!httpRequest) {
            form.submit();
            return;
        }
        
        var postString = "";
        for (var n=0; n < form.elements.length; n++) {
            postString += form.elements[n].name + "=" + escape(encodeURI(form.elements[n].value)) + (n==form.elements.length-1?"":"&");
        }
        httpRequest.onreadystatechange = function() {
            if (httpRequest.readyState == 4) {
                document.getElementById(divId).innerHTML = httpRequest.responseText;
            }
        }
        httpRequest.open('POST', url, true);
        httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        httpRequest.setRequestHeader("Cookie", document.cookie+"");
        httpRequest.setRequestHeader("Connection", "close");
        httpRequest.setRequestHeader("Content-length", postString.length);
        httpRequest.send(postString);
    } else {
        loggingDebug("trying normal sumbit...you can not see this message anyway<br>");
        form.submit();
    }
}