loadForm = '';
unloadForm = '';
msgSave = 'You have made changes to your information.'+"\n"+'Press \'OK\' to continue without saving.';

addEvent(window, 'beforeunload', requireSave);
addEvent(window, 'load', function() { if( !document.getElementById('step') ){ removeEvent(window, 'beforeunload', requireSave); return; } loadForm = serializeForm(document.getElementById('step')); });

function requireSave(e)
{
	unloadForm = serializeForm(document.getElementById('step')); 
    if( loadForm != unloadForm ) e.returnValue = msgSave;
}

function toggle_same(obj)
{
    document.getElementById('ship_street_address').value 	= ( obj.checked ? document.getElementById('street_address').value : '');
    document.getElementById('ship_city').value 			 	= ( obj.checked ? document.getElementById('city').value : '');
    document.getElementById('ship_state').value 		 	= ( obj.checked ? document.getElementById('state').value : '');
    document.getElementById('ship_zip').value 			 	= ( obj.checked ? document.getElementById('zip').value : '');
    document.getElementById('ship_country').value 		 	= ( obj.checked ? document.getElementById('country').value : '');
}

function addEvent(obj, evType, fn)
{ 
    if (obj.addEventListener)
    { 
    	obj.addEventListener(evType, fn, true); 
    	return true; 
    } 
    else if (obj.attachEvent)
    { 
        var r = obj.attachEvent("on"+evType, fn); 
        return r; 
    } 
    else 
    { 
    	return false; 
    } 
} 

function removeEvent(obj, evType, fn) 
{
	if (obj.removeEventListener)
    { 
    	obj.removeEventListener(evType, fn, true); 
    	return true; 
    } 
    else if (obj.detachEvent)
    { 
        var r = obj.detachEvent("on"+evType, fn); 
        return r; 
    } 
    else 
    { 
    	return false; 
    } 
}

function serializeForm(elForm) 
{
    var aParams = [];
    
    for (var oInputList = elForm.elements, i = 0, iLen = oInputList.length, el, sEncodedName; i < iLen; i++) 
    {
    	el = oInputList[i];
    
    	if (el.name && !el.disabled) 
        {
    		sEncodedName = encodeURIComponent(el.name);
    		
            if (el.type == 'select-multiple') 
            {
    			for (var iOption = 0, iTotalOptions = el.length; iOption < iTotalOptions; iOption++) 
                {
    				if (el[iOption].selected) 
                    {
    					aParams.push(sEncodedName + '=' + encodeURIComponent(el[iOption].value));
    				}
    			}
    		} 
            else if ((el.type != 'radio' && el.type != 'checkbox') || el.checked) 
            {
			    aParams.push(sEncodedName + '=' + encodeURIComponent(el.value));
    		}
    	}
    }
    
    return aParams.join('&');
}

function toggle_cancel_arrival(obj)
{
	cancel_arrival = document.getElementById('cancel_arrival_transportation');
    
	if( cancel_arrival.value == '1' )
    {
    	obj.innerHTML = 'Cancel Arrival Transportation';
        obj.style.fontWeight = 'normal';
        cancel_arrival.value = 0;
    }
    else
    {
        obj.innerHTML = 'Cancellation for Arrival Transportation is Pending';
        obj.style.fontWeight = 'bold';
        cancel_arrival.value = 1;
    }
}

function toggle_cancel_departure(obj)
{
	cancel_departure = document.getElementById('cancel_departure_transportation');
    
	if( cancel_departure.value == '1' )
    {
    	obj.innerHTML = 'Cancel Departure Transportation';
        obj.style.fontWeight = 'normal';
        cancel_departure.value = 0;
    }
    else
    {
        obj.innerHTML = 'Cancellation for Departure Transportation is Pending';
        obj.style.fontWeight = 'bold';
        cancel_departure.value = 1;
    }
}

function toggle_cancel_meeting(obj)
{
	cancel_meeting = document.getElementById('cancel_meeting_registration');
    
	if( cancel_meeting.value == '1' )
    {
    	obj.innerHTML = 'Cancel this Meeting Registration';
        obj.style.fontWeight = 'normal';
        cancel_meeting.value = 0;
    }
    else
    {
        obj.innerHTML = 'Cancellation for Meeting Registration is Pending';
        obj.style.fontWeight = 'bold';
        cancel_meeting.value = 1;
    }
}

function toggle_cancel_guest(obj, id, val)
{
	cancel_guest = document.getElementById(id);
    
	if( cancel_guest.value == val )
    {
    	obj.innerHTML = 'Cancel this Guest';
        obj.style.fontWeight = 'normal';
        cancel_guest.value = 0;
    }
    else
    {
        obj.innerHTML = 'Cancellation Pending';
        obj.style.fontWeight = 'bold';
        cancel_guest.value = val;
    }
}

function toggle_cancel_passenger(obj, id, val)
{
	cancel_passenger = document.getElementById(id);
    
	if( cancel_passenger.value == val )
    {
    	obj.innerHTML = 'Cancel this Passenger';
        obj.style.fontWeight = 'normal';
        cancel_passenger.value = 0;
    }
    else
    {
        obj.innerHTML = 'Cancellation Pending';
        obj.style.fontWeight = 'bold';
        cancel_passenger.value = val;
    }
}

function toggle_passengers(obj)
{
	document.getElementById('passenger_3').style.display = (obj.value ? 'none' : '');
    document.getElementById('passenger_4').style.display = (obj.value ? 'none' : '');
    document.getElementById('passenger_5').style.display = (obj.value ? 'none' : '');
}

function toggle_passenger_list(obj, showBreak)
{
	obj2 = document.getElementById(obj.id.replace('arrival', 'departure'));
    
	document.getElementById('passenger_3').style.display = (obj.value == 'yes' || obj2.value == 'yes' ? 'none' : '');
    document.getElementById('passenger_4').style.display = (obj.value == 'yes' || obj2.value == 'yes' ? 'none' : '');
    document.getElementById('passenger_5').style.display = (obj.value == 'yes' || obj2.value == 'yes' ? 'none' : '');
    
    objDate = new Date();

    thisMonth = objDate.getMonth();
    thisDay   = objDate.getDate();
    thisYear  = objDate.getFullYear();
    
    thisDate = (thisMonth < 10 ? '0'+(thisMonth+1) : (thisMonth+1))+'-'+(thisDay < 10 ? '0'+thisDay : thisDay)+'-'+thisYear;
    
    if( obj.id.search('arrival') != -1 )
    {
   		document.getElementById('lbl_arrival_date').style.display = (obj.value == 'yes' ? 'none' : '');
    	document.getElementById('lbl_custom_arrival_date').style.display = (obj.value == 'yes' ? '' : 'none');
        
        if( obj.value ==  'yes' ) document.getElementById('customArrivalDate').value = thisDate;
    }
    else
    {
    	document.getElementById('lbl_departure_date').style.display = (obj.value == 'yes' ? 'none' : '');
    	document.getElementById('lbl_custom_departure_date').style.display = (obj.value == 'yes' ? '' : 'none');
        
        if( obj.value ==  'yes' ) document.getElementById('customDepartureDate').value = thisDate;
    }
    
    objHotel = document.getElementById('hotel_name');
    
    if( objHotel ) private_transfer_rate(objHotel, showBreak);
}

function private_transfer_rate(obj, showBreak)
{
	arr_pt = document.getElementById('private_transfer_arrival');
    dep_pt = document.getElementById('private_transfer_departure');

    //if private transfer is yes and hotel selection is on this page
    if( (arr_pt.value == 'yes' || dep_pt.value == 'yes') && obj.value != '' )
    {            
        var urlString = 'hotelId='+obj.value;

        var myConn = new XHConn();
        if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
        
        var fnWhenDone = function (oXML) 
        { 
            if( oXML.responseText )
            {
                xml = oXML.responseXML;
                rates = xml.getElementsByTagName('hotel')[0].selectNodes("rate");
        
		        document.getElementById('transfer_cost').parentNode.style.display = '';
                document.getElementById('transfer_cost').innerHTML = (showBreak ? '<br>' : '')+'<strong style="display:inline;">Private Transfer Cost</strong> - $' + rates[0].getAttribute("arrival");
            }                    
        };
        
        myConn.connect("/_includes/xml.private_transfer_cost.php", "GET", urlString, fnWhenDone);
    }
    else
    {
        document.getElementById('transfer_cost').innerHTML = '';
        document.getElementById('transfer_cost').parentNode.style.display = 'none';
    }
}

var timeOut;

function xmlCalendar(parent, child, callFunct)
{
	var p = document.getElementById(parent);
	var c = document.getElementById(child);

	if (typeof c.onmouseleave != 'undefined'){ //IE
		p.parentId      = p.id;
		p.childId       = c.id;
        p.callFunction	= callFunct;
        
		c.parentId      = p.id;
		c.childId       = c.id;
        c.callFunction	= callFunct;
		
        p.onclick 		= showCalendar;
        //p.onblur		= hideCalendar;
        p.onmouseleave	= hideCalendar;
        //c.onclick      = setDate;
        c.onmouseenter  = showCalendar;
		c.onmouseleave  = hideCalendar;
	}else{ //NON-IE
		p.parentId      = p.id;
		p.childId       = c.id;
        p.callFunction	= callFunct;
        
		c.parentId      = p.id;
		c.childId       = c.id;
        c.callFunction	= callFunct;
        
        p.onclick 		= showCalendar;
       	//p.onblur		= hideCalendar;
        p.onmouseout  	= hideCalendar;
        //c.onclick       = setDate;
        c.onmouseover  	= showCalendar;
		c.onmouseout  	= hideCalendar;
	}
}

function showCalendar(ev)
{
	var e = ev || event;
	var el = e.target || e.srcElement;
	var rel = e.relatedTarget || e.fromElement;

	if( el.childId )
		var p = el;  
    else
    	var p = el.parentNode
    
	if( p.childId ){      
		if( document.getElementById(p.childId).style.display == 'none' && this.callFunction ) this.callFunction(p.parentId, p.childId, p.thisDate);

		aLayer(p.parentId, p.childId);
		
        // check if other calendar is open, if so close it
        if( p.childId.indexOf('Arrival') != -1 ){
        	document.getElementById('customDepartureChild').innerHTML = '';
        	document.getElementById('customDepartureChild').style.display = 'none';
        }else if( p.childId.indexOf('Out') != -1 ){
        	document.getElementById('customArrivalChild').innerHTML = '';
        	document.getElementById('customArrivalChild').style.display = 'none';
        }
        
		document.getElementById(p.childId).style.display = '';
		window.clearTimeout(timeOut);
	}
}

function getCalendar( parentId, childId, thisDate )
{
	var p = document.getElementById(parentId);
    var c = document.getElementById(childId);
    var i = document.getElementById(parentId+'Date');    
    var d = (thisDate != undefined ? thisDate : i.value);
    
	var urlString = 'parentId='+parentId+'&childId='+childId+'&date='+d;
		
	var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	
	var fnWhenDone = function (oXML) { 		
		c.innerHTML = oXML.responseText;
	};
	
	myConn.connect("/_includes/xml.calendar.php", "GET", urlString, fnWhenDone);
}

function hideCalendar(ev)
{
	var e = ev || event;
	var el = e.target || e.srcElement;
	var rel = e.relatedTarget || e.fromElement;

	if( el.childId ){
        var closeLayer = function(){ 
        	var p = document.getElementById(el.parentId);
            var c = document.getElementById(el.childId);
            	c.style.display = 'none'; 
                c.innerHTML = '';
            
            //p.onblur = hLayer;
            //p.blur();
             
            return; 
        };
        
        var p = document.getElementById(el.parentId);
        if( p.value == '' && p.getAttribute('defaultValue'))
        	p.value = p.getAttribute("defaultValue");
            
        timeOut = window.setTimeout(closeLayer , 5000);
	}
}

function aLayer(parent, child){
	var p = document.getElementById(parent);
	var c = document.getElementById(child);
    
	var top  = p.offsetHeight;
	var left = 0;
	
	for (; p; p = p.offsetParent){
		top  += p.offsetTop;
		left += p.offsetLeft;
	}
    
    top -= 230;    left -= 240;
    
	c.style.position   = 'absolute';
	c.style.top        = top + 'px';
	c.style.left       = left + 'px';
}
 
function sLayer(ev){
	var e = ev || event;
	var el = e.target || e.srcElement;
	var rel = e.relatedTarget || e.fromElement;

	if( el.childId ){      
        if( (document.getElementById(el.parentId).value == document.getElementById(el.parentId).getAttribute("defaultValue")) && document.getElementById(el.parentId).getAttribute("defaultValue") )
        	document.getElementById(el.parentId).value = '';
        
		if( (document.getElementById(el.childId).style.display == 'none' || e.type == 'keyup') && this.callFunction ) this.callFunction(el.parentId, el.childId, 1);      

		aLayer(el.parentId, el.childId);
		
		document.getElementById(el.childId).style.display = '';
		window.clearTimeout(timeOut);
	}
}
 
function hLayer(ev){
	var e = ev || event;
	var el = e.target || e.srcElement;
	var rel = e.relatedTarget || e.fromElement;

	//alert(el.id+' - '+el.childId);

	if( el.childId && el.id == el.childId ){
        var closeLayer = function(){ 
            var c = document.getElementById(el.childId);
            
            for(var i = 0; i < c.childNodes.length;){
            	if( c.childNodes[i] )
            		c.removeChild(c.childNodes[i]);
            }
            
            document.getElementById(el.childId).style.display = 'none'; 
            
            document.getElementById(el.parentId).onblur = hLayer;
            document.getElementById(el.parentId).blur();
             
            return; 
        };
        
        //if( document.getElementById(el.parentId).value == '' && document.getElementById(el.parentId).getAttribute('defaultValue'))
        	//document.getElementById(el.parentId).value = document.getElementById(el.parentId).getAttribute("defaultValue");
            
        timeOut = window.setTimeout(closeLayer , 1000);
	}
} 

function setDate(obj, thisDate)
{
	var p = obj.getAttribute('parentId');
    	pI = document.getElementById(p+'Date');
	    pI.value = thisDate;
    
    var c = document.getElementById( obj.getAttribute('childId') )
      	c.style.display = 'none';
        c.innerHTML = '';
}

function toggle_players(obj)
{
	default_players  = document.getElementById('num_players').getAttribute('default')*1;
	num_players 	 = document.getElementById('num_players').value*1;
    selected_players = obj.value*1;
    
    last_num = document.getElementById('num_players').getAttribute('last_num')*1;
    
    if( default_players > 0 && last_num > 0 )
    {
    	msg = 'Note: Changing this number will erase all golf players below. Are you sure you want to continue?';
		if( !confirm(msg) ){ obj.value = document.getElementById('num_players').getAttribute('last_num'); return false; }
    }
    
    document.getElementById('num_players').setAttribute('last_num', selected_players);

    div = document.getElementById('gplayers');
    
    //remove all players
    child_len = div.childNodes.length;
    for(i = 1; i <= child_len; i++)
    {
        if( document.getElementById('player_'+i) ) 
        {
        	div.removeChild(document.getElementById('player_'+i));
        }
    }
    
    for(i = 1; i <= selected_players; i++)
    {
    	fieldset 	= document.createElement('fieldset');
        fieldset.id = 'player_'+i;
        
    	title 	= '<strong class="guest_title">Player '+i+'</strong>';
    	name 	= '<label for="player_name_'+i+'">First & Last Name <input type="text" name="player['+i+'][name]" id="player_name_'+i+'" value=""></label>';
        gender 	= '<label for="player_gender_'+i+'">Gender <select name="player['+i+'][gender]" id="player_gender_'+i+'"><option value="">-- select --</option><option value="Male">Male</option><option value="Female">Female</option></select></label>';
        phone 	= '<label for="player_rental_clubs_'+i+'">Rental Clubs <select name="player['+i+'][rental_clubs]" id="player_rental_clubs_'+i+'"><option value="">-- select --</option><option value="Right">Right Handed</option><option value="Left">Left Handed</option></select></label>';
        
        fieldset.innerHTML = title+"\n"+name+"\n"+gender+"\n"+phone;
        div.appendChild(fieldset);
    }

	if( obj.getAttribute('golf') == 1 && obj.value != '' )
    {
    	document.getElementById('golf_players').className = 'page_row tix_tour_3';
        num_players.value = selected_players;
    }
    else
    {   
        document.getElementById('golf_players').className = 'tix_tour_3_hide';        
        num_players.value = '0';
    }   	
}

function getRoomTypes( obj, id ){
	block_date = document.getElementById('block_date');
    
	urlString = 'hotel_id=' + obj.value+'&block_date='+block_date.value;

	myConn = new XHConn();
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
    
	fnWhenDone = function (oXML){
    	objId = document.getElementById(id);
            
        opts = objId.options.length;
        for(i = 1; i < opts; i++)
        {
            objId.removeChild(objId.options[1]);
        }
        //alert(oXML.responseText);
    	if( oXML.responseText )
        {
            xml = oXML.responseXML;
            types = xml.getElementsByTagName('types')[0].selectNodes("type");
    
            for(i = 0; i < types.length; i++)
            {
                type_val = types[i].selectSingleNode("text()").nodeValue;
                type_id  = types[i].getAttribute("id");
                type_selected = types[i].getAttribute("selected");
                
                opt = new Option(type_val, type_val); 
                if( type_selected == 'selected' ) opt.selected = true;
                           
                objId.options[i+1] = opt;            
            }
		}
	};
	
	myConn.connect("/_includes/xml.room_types.php", "GET", urlString, fnWhenDone);	
}

function duplicate_guests(obj)
{
    for(i = 1; i <= 5; i++)
    {
        if( document.getElementById('meeting_last_name_'+i) && document.getElementById('passenger_last_name_'+i) )
            document.getElementById('passenger_last_name_'+i).value = ( obj.checked ? document.getElementById('meeting_last_name_'+i).innerHTML : document.getElementById('passenger_last_name_'+i).getAttribute('defaultValue') );
            
		if( document.getElementById('meeting_first_name_'+i) && document.getElementById('passenger_first_name_'+i) )
            document.getElementById('passenger_first_name_'+i).value = ( obj.checked ? document.getElementById('meeting_first_name_'+i).innerHTML : document.getElementById('passenger_first_name_'+i).getAttribute('defaultValue') );

		if( document.getElementById('meeting_contact_phone_'+i) && document.getElementById('passenger_contact_phone_'+i) )
            document.getElementById('passenger_contact_phone_'+i).value = ( obj.checked ? document.getElementById('meeting_contact_phone_'+i).innerHTML : document.getElementById('passenger_contact_phone_'+i).getAttribute('defaultValue') );
            
		if( document.getElementById('meeting_age_'+i) && document.getElementById('passenger_age_'+i) )
            document.getElementById('passenger_age_'+i).value = ( obj.checked ? document.getElementById('meeting_age_'+i).innerHTML : document.getElementById('passenger_age_'+i).getAttribute('defaultValue') );                                    
    }
}

function show_required( obj, d )
{
	document.getElementById(d+'airline').className 	= (!obj.value ? 'error_hidden' : 'error');
    document.getElementById(d+'flight').className 	= (!obj.value ? 'error_hidden' : 'error');
    document.getElementById(d+'from').className 	= (!obj.value ? 'error_hidden' : 'error');
    document.getElementById(d+'to').className 		= (!obj.value ? 'error_hidden' : 'error');
    document.getElementById(d+'time').className 	= (!obj.value ? 'error_hidden' : 'error');
}

/*
$options = ($arr_passengers[$i]['passenger_option'] ? explode(',', $arr_passengers[$i]['passenger_option']) : array());

print( (in_array('cancelled^arrival', $options) ? 
        '<option value="add^arrival">Add Arrival</option>' : '<option value="remove^arrival">Cancel Arrival</option>' ) );
        
print( (in_array('cancelled^departure', $options) ? 
        '<option value="add^departure">Add Departure</option>' : '<option value="remove^departure">Cancel Departure</option>' ) );

print( (!in_array('cancelled^arrival', $options) && !in_array('cancelled^departure', $options) ? 
        '<option value="remove^both">Cancel Both</option>' : '') );
*/
function cancel_transportation()
{
	arrival = document.getElementById('cancel_arrival');
    departure = document.getElementById('cancel_departure');
    
   	for(i = 1; i <= 5; i++)
    {
    	opt = document.getElementById('passenger_modification_'+i);  
        
    	if( opt )
        {               		
        	len = opt.length;
            
            for(x = 0; x < len; x++) opt.remove(1);  
        	opt.remove(1);
            
            opts = (document.getElementById('passenger_option_'+i).value ? document.getElementById('passenger_option_'+i).value.split(',') : new Array);
   
            //figure out which options to add
        	if( arrival.value && departure.value )
            {
            	if( !in_array('cancelled^arrival', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Arrival';
                    new_opt.value = 'remove^arrival';
                    new_opt.selected = true;
                    opt.options.add(new_opt);
                }
                
                if( !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Departure';
                    new_opt.value = 'remove^departure';
                    new_opt.selected = true;
                    opt.options.add(new_opt);
                }
                
            	if( !in_array('cancelled^arrival', opts) && !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Both';
                    new_opt.value = 'remove^both';
                    new_opt.selected = true;
                    opt.options.add(new_opt);
                }
            }
            else if( arrival.value )
            {
            	if( !in_array('cancelled^arrival', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Arrival';
                    new_opt.value = 'remove^arrival';
                    new_opt.selected = true;
                    opt.options.add(new_opt);
                }
                
                if( !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Departure';
                    new_opt.value = 'remove^departure';
                    opt.options.add(new_opt);
                }
                
                if( !in_array('cancelled^arrival', opts) && !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Both';
                    new_opt.value = 'remove^both';
                    opt.options.add(new_opt);
                }
            }
            else if( departure.value )
            {
            	if( !in_array('cancelled^arrival', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Arrival';
                    new_opt.value = 'remove^arrival';
                    opt.options.add(new_opt);
                }
                
            	if( !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Departure';
                    new_opt.value = 'remove^departure';
                    new_opt.selected = true;
                    opt.options.add(new_opt);
                }

                if( !in_array('cancelled^arrival', opts) && !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Both';
                    new_opt.value = 'remove^both';
                    opt.options.add(new_opt);
                }                            
            }
            else
            {
            	new_opt = document.createElement('option');
                new_opt.text = '-- select option --';
                new_opt.value = '';
                new_opt.selected = true;
                opt.options.add(new_opt);    
                
                if( document.getElementById('arrival_status').value != 'cancelled' )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = ( in_array('cancelled^arrival', opts) ? 'Add Arrival' : 'Cancel Arrival' );
                    new_opt.value = ( in_array('cancelled^arrival', opts) ? 'add^arrival' : 'remove^arrival' );
                    opt.options.add(new_opt);  
				}                              	
                
                if( document.getElementById('departure_status').value != 'cancelled' )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = ( in_array('cancelled^departure', opts) ? 'Add Departure' : 'Cancel Departure' );
                    new_opt.value = ( in_array('cancelled^departure', opts) ? 'add^departure' : 'remove^departure' );
                    opt.options.add(new_opt);
                }
                
            	if( !in_array('cancelled^arrival', opts) && !in_array('cancelled^departure', opts) )
                {
                    new_opt = document.createElement('option');
                    new_opt.text = 'Cancel Both';
                    new_opt.value = 'remove^both';
                    opt.options.add(new_opt);
                }  
            }
        }
    }
}

function in_array(needle, haystack, strict) 
{
    found = false, key = '', strict = !!strict;
 
    for (key in haystack) 
    {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) 
        {
            found = true;
            break;
        }
    }
 
    return found;
}

/** Ajax Functions **/

if( document.implementation.hasFeature("XPath", "3.0") ){
	if( typeof XMLDocument == "undefined" ){ XMLDocument = Document; }
  XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
    if( !xNode ) { xNode = this; } 
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){aResult[i] =  aItems.snapshotItem(i);	}
		return aResult;
	}
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; } 
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){return xItems[0];	}
		else{return null;	}
	}
	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){	return this.ownerDocument.selectNodes(cXPathString, this);}
		else{throw "For XML Elements Only";}
	}
	Element.prototype.selectSingleNode = function(cXPathString){	
		if(this.ownerDocument.selectSingleNode){return this.ownerDocument.selectSingleNode(cXPathString, this);	}
		else{throw "For XML Elements Only";}
	}
}

function XHConn()
{
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

/** End Ajax Functions **/