/**
 * JJBW Page object
 *
 * @changes 2008-04-23 / mb / created
 *
 * @copyright Copyright © 2005-2008 / CHILIBYTES Böhm & Welte GbR / www.chilibytes.com
 * @author mb
 * @version 1.0.0
 *
 * @package de.jj_bw
 * @subpackage www
 *
 */

/**
 * Include required elements
 */
var CB_AjaxCommonInterface = com.chilibytes.ccl.ajax.CB_AjaxCommonInterface;
var CB_Address = com.chilibytes.ccl.cms.CB_Address;
var JJBW_WSWItem = de.jj_bw.www.JJBW_WSWItem;

/**
 * Namespaces
 */
if ( !window.de ) window.de = {};
if ( !de.jj_bw ) de.jj_bw = {};
if ( !de.jj_bw.www ) de.jj_bw.www = {};


/**
 * Constructor
 *
 * @access public
 */
de.jj_bw.www.JJBW_WSW = function( parentID, ajaxCommonInterfaceURL ) {
	// Constructor
	this.constructor = de.jj_bw.www.JJBW_WSW;
	// Parent
    this.fParentObj = document.getElementById( parentID );
	// Item container
    this.fWSWItemA = new Array();
    this.fAddressA = new Array();
    this.fAddressNameA = new Array();
    this.fEventHandlerA = new Array();
    // Ajax interface
	this.fAjaxCommonInterface = new CB_AjaxCommonInterface( ajaxCommonInterfaceURL );
	if ( this.fAjaxCommonInterface ) {
		this.fAjaxCommonInterface.EventContentRequestAttach( this, this.WSWContentRequestEvent );
	}
	// Load container object
	this.fItemContainer = document.getElementById( JJBW_PAGE_ID_CONTAINER_WSW_ADDRESS_PREFIX + "container" );
	this.fItemTemplate = document.getElementById( JJBW_PAGE_ID_CONTAINER_WSW_ADDRESS_PREFIX + "item" ).cloneNode( true );
	while( this.fItemContainer.firstChild ) {
		this.fItemContainer.removeChild( this.fItemContainer.firstChild );
	}
	this.fInfoObjCurrent = document.getElementById( JJBW_PAGE_ID_CONTAINER_WSW_CURRENT_ID );
	// Internal refernce to the select item
	this.fSelectedItem = null;
}

/**
 * Reloads news
 *
 * @access public
 */
de.jj_bw.www.JJBW_WSW.prototype.Reload = function() {
	if ( this.fAjaxCommonInterface ) {
		this.fAjaxCommonInterface.ContentItemsRequest( "addresses" );
	}
}

/**
 * Reloads news
 *
 * @access public
 */
de.jj_bw.www.JJBW_WSW.prototype.ShowItem = function( menuItemID ) {
	this.fSelectedItem = this.fWSWItemA[menuItemID];
	if ( this.fSelectedItem ) {
		this.fSelectedItem.Show();
	}
}

/**
 * Reloads news
 *
 * @access public
 */
de.jj_bw.www.JJBW_WSW.prototype.ShowName = function( menuItemID, hasFocus ) {
	var itemP = ( hasFocus ? this.fWSWItemA[menuItemID] : this.fSelectedItem );
	var data = "";
	if ( itemP  ) {
		data = itemP.NameGet();
	}
	if ( this.fInfoObjCurrent ) {
		this.fInfoObjCurrent.firstChild.data = data;
	}
}

/**
 * Request event
 *
 * @access public
 */
de.jj_bw.www.JJBW_WSW.prototype.WSWContentRequestEvent = function( xmlObject, xmlStructure ) {
	if ( xmlObject ) {
		var addressA = xmlObject.getElementsByTagName( "address" );
		var itemA = xmlObject.getElementsByTagName( "wswitem" );
		if ( addressA && addressA.length > 0 ) {
			this._ParseAddress( addressA );
			this.fAjaxCommonInterface.ContentItemsRequest( "wswitems" );
		}
		else if ( itemA && itemA.length > 0 ) {
			this._ParseWSWItems( itemA );
			JJBW_Page.LoadingStatusChanged( true );
			this._EventHandlerOnLoaded();
		}
	}
}

/**
 * Parses wswitem
 *
 * @access private
 */
de.jj_bw.www.JJBW_WSW.prototype._ParseWSWItems = function( itemA ) {
	for ( var i=0; i < itemA.length; i++ ) {
		if ( itemA[i] ) {
			var addressId = itemA[i].getAttribute( "addressId" );
			if ( this.fAddressA[addressId] && this.fAddressNameA[addressId] ) {
				var wswItem = new JJBW_WSWItem( itemA[i].getAttribute( "id" ), this.fAddressNameA[addressId], this.fItemContainer, this.fItemTemplate );
				if ( wswItem ) {
					for ( var addrIx = 0; addrIx < this.fAddressA[addressId].length; addrIx++ ) {
						wswItem.AddressAdd( this.fAddressA[addressId][addrIx] );
					}
				}
				this.fWSWItemA[wswItem.IDGet()] = wswItem;
			}
		}
	}
}

/**
 * Parses addresses
 *
 * @access private
 */
de.jj_bw.www.JJBW_WSW.prototype._ParseAddress = function( addressA ) {
	for ( var i = 0; i < addressA.length; i++ ) {
		var addressId = addressA[i].getAttribute("id");
		this.fAddressA[addressId] = new Array();
		this.fAddressNameA[addressId] = addressA[i].getAttribute("name");
		var officeA = addressA[i].getElementsByTagName( "office" );
		var officeAddress = null;
		var elementObjA = null;
		for ( var officeIx = 0; officeIx < officeA.length; officeIx++ ) {
			officeAddress = new CB_Address( officeA[officeIx].getAttribute( "name" ) )
			elementObjA = officeA[officeIx].getElementsByTagName("name")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.Name2Set( elementObjA.firstChild.nodeValue );
			elementObjA = officeA[officeIx].getElementsByTagName("street")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.StreetSet( elementObjA.firstChild.nodeValue );
			elementObjA = officeA[officeIx].getElementsByTagName("zip")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.ZipSet( elementObjA.firstChild.nodeValue );
			elementObjA = officeA[officeIx].getElementsByTagName("city")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.CitySet( elementObjA.firstChild.nodeValue );
			elementObjA = officeA[officeIx].getElementsByTagName("phone")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.TelephoneSet( elementObjA.firstChild.nodeValue );
			elementObjA = officeA[officeIx].getElementsByTagName("fax")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.FaxSet( elementObjA.firstChild.nodeValue );
			elementObjA = officeA[officeIx].getElementsByTagName("email")[0];
			if ( elementObjA && elementObjA.firstChild ) officeAddress.EmailSet( elementObjA.firstChild.nodeValue );
			this.fAddressA[addressId].push( officeAddress );
		}
	}
}

/**
 * Register eventhandler on click the item
 *
 * @access public
 */
de.jj_bw.www.JJBW_WSW.prototype.EventOnLoadedAttach = function( parentP, eventFuncP ) {
	if ( eventFuncP ) {
	    this.fEventHandlerA["onLoaded"] = new Array();
	    this.fEventHandlerA["onLoaded"]["parent"] = parentP;
    	this.fEventHandlerA["onLoaded"]["event"] = eventFuncP;
    }
}

/**
 * Eventhandler on click the item
 *
 * @access private
 */
de.jj_bw.www.JJBW_WSW.prototype._EventHandlerOnLoaded = function() {
	if ( this.fEventHandlerA["onLoaded"] ) {
		 this.fEventHandlerA["onLoaded"]["event"].call( this.fEventHandlerA["onLoaded"]["parent"], this );
	}
}
