/* AJAX Request handling */
/*************************/
var xmlHttp;
var xmlResponse;
var xslDocLoc;
var transformedResponse;
var preDiv;
var postDiv;
var postDivInline = false;
var cookieName;
var cookieValue;

function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        var vers = ["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
        var err;
        for(var i = 0; i < vers.length; i++) {
            try {
                err = null;
                xmlHttp = new ActiveXObject(vers[i]);
                break;
            } catch (err) {
                //nada
            }
        }        
    } else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
    
function startRequest(method, request) {
	createXMLHttpRequest();
	xmlHttp.onreadystatechange = handleStateChange;
	//alert('method: ' + method + ' request: ' + request);
	xmlHttp.open(method, request, true);
	xmlHttp.send(null);
}
    
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
			xmlResponse = xmlHttp.responseXML;
            
			if (window.ActiveXObject) 
			{
				var xml;
				var err;
				var vers = ["MSMXL2.DOMDocoument.6.0","MSMXL2.DOMDocoument.5.0","MSMXL2.DOMDocoument.4.0","MSMXL2.DOMDocoument.3.0","MSMXL2.DOMDocoument","Microsoft.XMLDOM"];
				for(var i = 0; i < vers.length; i++) {
					try {
						err = null;
						xml = new ActiveXObject(vers[i]);
						break;
					} catch (err) {
						//nada
					}
				}
				
				if (!err) {
					xml.async = false;
					xml.load(xmlResponse);
					
					var xsl = new ActiveXObject("Microsoft.XMLDOM");
					xsl.async = false;
					xsl.load(xslDocLoc);
					
					transformedResponse = xml.transformNode(xsl);
				} else {
					alert('Is MSMXL installed? \n\n(' + err.description + ')');
				}
			} else {
				var xsl = document.implementation.createDocument("","",null);
				xsl.async = false;
				xsl.load(xslDocLoc);
				
				var processor = new XSLTProcessor();
				processor.importStylesheet(xsl);
				
				var result = processor.transformToDocument(xmlResponse);
				var serializer = new XMLSerializer();
				transformedResponse = serializer.serializeToString(result);
			}
			
			//alert(transformedResponse);
			if (transformedResponse != '') {
			    document.getElementById(postDiv).innerHTML = transformedResponse;
			}
        } else {
			document.getElementById(postDiv).innerHTML = "Error: HTTP Status Code = " + xmlHttp.status;
        }
        
        if (preDiv != '') 
		{
		    document.getElementById(preDiv).style.display = "none";
		}
        
        if (transformedResponse != '') 
		{
            if (postDivInline) {
                document.getElementById(postDiv).style.display = "block";
            } else {
                document.getElementById(postDiv).style.display = "inline";
            }
		} else {
		    document.getElementById(postDiv).style.display = "none";
		}
        
        if (cookieName != '') 
        {
            set_cookie();
        }
    } 
}

/* Google GEOcoder request */
/***************************/
var xmlHttpGoog;
var aidGoog;
var cidGoog;
var sidGoog;
var zidGoog;
var cooridGoog;
var cntryidGoog;
function makeGoogleGeoCoderRequest(aid,cid,sid,zid,coorid,cntryid) {
    aidGoog = aid;
    cidGoog = cid;
    sidGoog = sid;
    zidGoog = zid;
    cooridGoog = coorid;
    cntryidGoog = cntryid;
    var a = urlencode(document.getElementById(aid).value);
    var c = urlencode(document.getElementById(cid).value);
    var s = urlencode(document.getElementById(sid).options[document.getElementById(sid).selectedIndex].value);
    var z = urlencode(document.getElementById(zid).value);
    
    if (a != '' && c != '' && s!='-1' && s!='') {
        if (window.ActiveXObject) {
            var vers = ["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
            var err;
            for(var i = 0; i < vers.length; i++) {
                try {
                    err = null;
                    xmlHttpGoog = new ActiveXObject(vers[i]);
                    break;
                } catch (err) {
                    //nada
                }
            }        
        } else if (window.XMLHttpRequest) {
            xmlHttpGoog = new XMLHttpRequest();
        }
        if (xmlHttpGoog != null) {
            xmlHttpGoog.onreadystatechange = handleGoogleRequestStateChange;
            var req = 'AJAXHandler.aspx?do=MakeGoogleGeoCoderRequest&a='+ a + '&c=' + c + '&s=' + s + '&z=' + z;
            //alert(req);
            xmlHttpGoog.open('GET',req, true);
            xmlHttpGoog.send(null);
        }
    } else {
        alert('you need to set at least a partial address, a city,\n and a state for me to help you with the address.');
    }
}
    
function handleGoogleRequestStateChange() {
    if(xmlHttpGoog.readyState == 4) {
        if(xmlHttpGoog.status == 200) {
	        var xmlResponse = xmlHttpGoog.responseXML;	        
		//alert(xmlResponse);
	        var errors = xmlResponse.getElementsByTagName('error');
	        var error;

	        if (errors.length > 0) {
	            error = errors[0].childNodes[0].nodeValue;
	            alert('Error: ' + error);
	        } else {
	            try {        
	                var address = xmlResponse.getElementsByTagName('address')[0].childNodes[0].nodeValue.toLowerCase();
	                var countryCodeName = xmlResponse.getElementsByTagName('countryCodeName')[0].childNodes[0].nodeValue;
	                var coordinates = xmlResponse.getElementsByTagName('coordinates')[0].childNodes[0].nodeValue;
	                var betterAddress = confirm('how about this address instead?\n\n-> ' + address + ' <-\n\n(coordinates: ' + coordinates + ')');
	                if (betterAddress) {
	                    var splitAddress = address.split(',');
	                    if (splitAddress.length > 3) {
	                        document.getElementById(aidGoog).value = splitAddress[0];
	                        document.getElementById(cidGoog).value = trim(splitAddress[1]);
	                        var splitStateZip = splitAddress[2].split(' ');
	                        document.getElementById(zidGoog).value = splitStateZip[2];
	                    }
	                }
	                document.getElementById(cooridGoog).value = coordinates;
	                document.getElementById(cntryidGoog).value = countryCodeName;
	            } catch (e) {
	                alert('sorry, i couldn\'t help you with this address...\n\n (' + e.description + ')');
	            }
	        }
	        
            xmlHttpGoog = null;
            aidGoog = '';
            cidGoog = '';
            sidGoog = '';
            zidGoog = '';
            cooridGoog = '';
            cntryidGoog = '';
        }
    }
}


/* URL encoding */
/****************/
function urlencode(s) {
    var enc;
    try { enc = encodeURIComponent(s); } catch (e) { enc = escape(s); }
    return enc.replace(/%20/g,"+");
}

/* Set cookie by global vals */
/*****************************/
function set_cookie() {
    var cookie_val = get_cookie(cookieName);
	if (cookie_val != "") {
		cookie_val = cookieName + "=" + cookie_val + "|" + cookieValue;
	} else {
		cookie_val = cookieName + "=" + cookieValue;
	}
	document.cookie = cookie_val;
}

/* Get cookie by name */
/**********************/
function get_cookie(Name) { 
	var search = Name + "=";
	var returnvalue = "";
	
	if (document.cookie.length > 0) {
		offset = document.cookie.indexOf(search)
	
		if (offset != -1) { 
			offset += search.length;
			end = document.cookie.indexOf(";", offset);
			if (end == -1) end = document.cookie.length;
			returnvalue = unescape(document.cookie.substring(offset, end));
		}
	}
	return returnvalue;
}

/* Bookmark this site */
/*********************/
function addbookmark(url, pagetitle) {
	if (document.all)
		window.external.AddFavorite(url, pagetitle);
	else if (window.sidebar)
		window.sidebar.addPanel(pagetitle, url, "")
}

/* pearl gallery roll over */
/***************************/
function rollOnGalleryThumb(id) {
    document.getElementById(id).style.cursor = "pointer";
    document.getElementById(id).style.border = "solid 1px #FFCC66";
    document.getElementById(id).style.backgroundColor = "#FFFFCC";
}

function rollOffGalleryThumb(id) {
    document.getElementById(id).style.border = "solid 1px #CCCCCC";
    document.getElementById(id).style.backgroundColor = "#FFFFFF";   
}

/* pop up pearl */
/****************/
var popupHandle;

function closePopup() 
{
	if (popupHandle != null && !popupHandle.closed) {
		popupHandle.close();
	}
}

function openPopup(width,height,url)
{
    openPopupExt(width,height,0,url);
}

function openPopupExt(width,height,scrollbars,url)
{
	var leftprop, topprop, screenX, screenY;

	if(navigator.appName == "Microsoft Internet Explorer") {
		screenY = document.body.offsetHeight;
		screenX = window.screen.availWidth;
	} else {
		screenY = window.outerHeight;
		screenX = window.outerWidth;
	}		
	leftvar = (screenX - width) / 2;
	rightvar = (screenY - height) / 2;

	if(navigator.appName == "Microsoft Internet Explorer") {
		leftprop = leftvar;
		topprop = rightvar;
	} else {
		leftprop = (leftvar - pageXOffset);
		topprop = (rightvar - pageYOffset);
	}	

	closePopup();

	popupHandle = open(url,'','height='+height+',width='+width+',toolbar=0,scrollbars='+scrollbars+',left='+leftprop+',top='+topprop);
}

function popUpPearlImage(home,pguid)
{
    var w=498;
    var h=410;
    var u=home+'/Pearls/'+pguid+'/barscribe.jpg';
	openPopup(w,h,u);
}

/* submit on enter */
/*******************/
function tbKeyPress(evt, btnId) {
    if ((evt.which && evt.which == 13) || 
        (evt.keyCode && evt.keyCode == 13))
    {
        document.getElementById(btnId).click();
        return false;
    } else {
        return true;
    }
}

/* trim string */
/***************/
function trim(value) {
   var temp = value;
   var obj = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$2'); }
   return temp;
}


/* Global load/unload tasks */
/****************************/
function onloadfunction() {

}

function onunloadfunction() {

}

if (window.addEventListener) {
	window.addEventListener("load", onloadfunction, false);
	window.addEventListener("unload", onunloadfunction, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", onloadfunction);
	window.attachEvent("onunload", onunloadfunction);
} else if (document.getElementById) {
	window.onload=onloadfunction;
	window.onunload=onunloadfunction;
}