YAHOO.namespace("ps.Details");
(function () {
    var Dom  = YAHOO.util.Dom,
    	Ev   = YAHOO.util.Event,
    	Ppd  = YAHOO.ps.Details;

	var config = { listingPage: '' };
	
	var setConfig = function (keys) {
		for(var i in keys) {
			if (YAHOO.lang.hasOwnProperty(keys, i)) {
				config[i] = keys[i];
			}
		}
	};

	var listingTab = function (id, type, tab) {
		var currListings = Dom.getElementsByClassName('listing', 'div', 'results' + tab);
		if (currListings.length == 0) {
			var postData = 'type=' + type + '&id=' + id + '&tab=' + tab;
			YAHOO.util.Connect.asyncRequest('POST', '/server/associates/listings', listingsCallback, postData); 
		}
	};

	//////////////////////////////////
    // Details AJAX
	//////////////////////////////////
	var handleListingsSuccess = function(o) {
		// Run response Ajax response through common eval
		var response = YAHOO.ps.Ajax.eval(o);
		// If not false response was evaluated
		if (response !== false) {
	               
            //YAHOO.util.Dom.removeClass('pplDetails','loading');                                
            if (response['success'] > 0) { 
                var content = Dom.get('results' + response['tab']);

                var html = '';
				for(var i=0; i<response['listings'].length; i++) {
					html += getListItemDisplay(response['listings'][i], response['ids']);
				}
				YAHOO.util.Dom.removeClass('results' + response['tab'], 'loading');

				content.innerHTML = html;
            }                      
	    }    
	};
	                   
	var handleListingsFailure = function(o) {
	    if (o.responseText !== undefined){
			// Error message
	    }
	}; 
	
	var listingsCallback =
	{
	    success:handleListingsSuccess,
	    failure:handleListingsFailure,
	    timeout:15000
	};

	var addCommas = function(nStr) {
		nStr += '';
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	};

	/**
	 * @function builds a DIV tag for the listing
	 *
	 * @param {Array} The listing details
	 * @returns {String} The DIV tag of the listing item
	 */
	var getListItemDisplay = function(listing, ids) {
		var htmlListing = '';
		
		if (listing['url_picture'] != '') {		   
			htmlListing += '<div class="image"><img src="' + listing['url_listview'] + '" /></div>';
		} else {
			htmlListing += '<div class="image"><img src="/resources/images/nolisting-list.jpg" /></div>';
		}
		htmlListing += '<div class="detailGrp">';
		//htmlListing += '<div class="logo"><img src="/resources/images/logo-sm.gif" /></div>';

		htmlListing += '<div class="status"><span class="';
		htmlListing += (listing['list_status'] == 'ACTIVE') ? 'value green' : 'value red';
		htmlListing += '">' + listing['list_status'] + '</span>';
		
		var idString = '';
		for (var i = 0; i < ids.length; i++) {
			idString += '|' + ids[i];
		}
		
		if ((idString.indexOf(listing['pri_agent_id']) >= 0 || idString.indexOf(listing['sec_agent_id']) >= 0) && 
			idString.indexOf(listing['sale_agent_id']) >= 0 && listing['list_status'] == 'SOLD') {
			htmlListing += ' - Listing and Selling Agent';
		} else if ((idString.indexOf(listing['pri_agent_id']) >= 0 || idString.indexOf(listing['sec_agent_id']) >= 0) && 
			listing['list_status'] == 'SOLD') {
			htmlListing += ' - Listing Agent';
		} else if (idString.indexOf(listing['sale_agent_id']) >= 0 && listing['list_status'] == 'SOLD') {
			htmlListing += ' - Selling Agent';
		}

		htmlListing += '</div>';
		htmlListing += '<div class="title">' + listing['street_address'] + '<br />' + listing['city'];
		htmlListing += ', ' + listing['state'] + ' ' + listing['zip'] + '</div>';
		
		if (listing['list_status'] == 'SOLD') {
			htmlListing += '<div class="price">$' + addCommas(listing['close_price']) + '</div>';
			htmlListing += '<div class="info">Close Date: ' + YAHOO.ps.Date.getDate(listing['close_date']) + '</div>';
		} else {
			htmlListing += '<div class="price">$' + addCommas(listing['list_price']) + '</div>';
			htmlListing += '<div class="info">Listed: ' + YAHOO.ps.Date.getDate(listing['list_date']) + '</div>';
		}
		

		if (listing['beds'] > 0 || listing['baths'] > 0) {
			htmlListing += '<div class="info">';
			if (listing['beds'] > 0) {
				htmlListing += listing['beds'] + ' Bed';
			}
			if (listing['baths'] > 0) {
				if (listing['beds'] > 0) {
					htmlListing += ' | ';
				}
				var bathTotal = (parseInt(listing['baths_full']) + (listing['baths_half']/2));
				bathTotal += ' Bath';
				htmlListing += bathTotal.replace('.5', ' 1/2');
			}
			htmlListing += '</div>';
		}

		if (listing['type_listing'] == 'lot') {
			htmlListing += '<div class="info">Lot Size: ' + (listing['area_lot_size']/43560).toFixed(2) + ' Acre(s)</div>';
		}
		
		htmlListing += '</div>';
		// Add open house
		if (!YAHOO.lang.isUndefined(listing['openHouses'])) {
			htmlListing += '<div class="oh"><div class="title">OPEN HOUSE:</div>' + listing['openHouses'][0]['open_date'];
			htmlListing += '<br />' + listing['openHouses'][0]['open_start_time'] + ' - ';
			htmlListing += listing['openHouses'][0]['open_end_time'];
			if (!YAHOO.lang.isUndefined(listing['openHouses'][1])) {
				htmlListing += '<div class="oh2">' + listing['openHouses'][1]['open_date'];
				htmlListing += '<br />' + listing['openHouses'][1]['open_start_time'] + ' - ';
				htmlListing += listing['openHouses'][1]['open_end_time'] + '</div>';				
			}
			htmlListing += '</div>';
		}

		var onClick   = '';
		var listClass = '';
		if (listing['list_status'] != 'SOLD') {
			onClick = ' onclick="location.href=\'' + config['listingPage'] + '/key/' + listing['listing_key'] + '\';"';	
		} else {
			listClass = ' sold';
		}
		
		htmlListing = '<div id="keyList' + listing['listing_key'] + '" class="listing' + listClass + '"' + onClick + '>' + htmlListing + '</div>';		
		
		return htmlListing;
	};
    
 	// Elements
    var detailsTab;
    
    var initTabs = function() {
        // Create tab and set default view
    	detailsTab = new YAHOO.widget.TabView("boxPages");
    	detailsTab.selectTab(0);
    };
    
    // Public functions
    Ppd.listingTab = listingTab;
    Ppd.initTabs   = initTabs;
    Ppd.setConfig  = setConfig;
})();	