/********************************************************
   sign class
   - requires the dojo framework
   - requires json-rpc server 
 ********************************************************/


var sign = (function()
	{
    /* --------------------------------------------------
	   private attributes
	   -------------------------------------------------- */
	
	// SIGN


	var tiny = 0;
	var waitCounter  = 0;
	var debitor      = '';
	var text		 = '';	
	var format       = 0; // size 
	var material     = 0; // material
	var baseform     = 0; // type of sign 
	var base_color   = 0; // base color
	var border_color = 0; // border color
	var layout       = 0; // layout id
	var font_color   = 0; // font color
	var lay_has_pict = 0; // layout: number of pictograms 
	var lay_has_text = 0; // laoyut: number of text elements
	var price_pu     = 0; // price per unit
	var font         = 0; // font id
	var font_count   = 0;
	var mat_nr       = 0;
	var staffel      = 0;
	var sign_id = 0;
	var picto = new Array();
	var sign_has_text = false;
	var basket_count = 0;
	var current_item = 0;
	var post_login   = '';
	var total_basket_sum = 0;
	
	// JSON SERVER
	
	var json_url    = '';  // url to json server (base)
	var preview_url = '';  // url to preview image (small)
	var preview_id  = '';  // id of preview image tag
	var zoom_url    = '';  // url to zoom image
	var selectimg_url=''; 
	
	// DOM
	
	var id_info_pre  = ''; // ID prefix of info elements
	var id_tab_cont  = '';
	
	var id_c_form         = 'formContainer';
	var id_c_base_color   = '';
	var id_c_border_color = '';
	var id_c_layout       = '';
	var id_c_pikto        = '';
	
	
	var reset_on_select   = true;
	var picto_loaded = 0;
	var pig_loaded = 0;
	var pig_items = new Array();
	var basecol_loaded = 0;
	var bordercol_loaded = 0;
	
	// items loaded from server
	
	var i_layout; // JSON layout object
	
	var autoTabSwitchEnable = true;
	var user='';
	
	// DEBUG
	
	var debugging   = false;
	
	var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	
	function selectTabGrundform() { selectTab ( 'Grundform'); }
	function selectTabPikto()     { selectTabIfEnabled ( 'PiktoTabs'); }
	function selectTabMaterial()     { selectTabIfEnabled ( 'Material'); }
	function selectTabFont()      { selectTabIfEnabled ( 'Schriftart'); }
	function selectTabLayout()      { selectTabIfEnabled ( 'Layout'); }
	function selectTabOrder()      { selectTabIfEnabled ( 'Bestellen'); }
	function selectTabText()      { selectTabIfEnabled ( 'Text'); }
	function selectTabFormat()      { selectTabIfEnabled ( 'Format'); }

	function selectTabIfEnabled ( id )     
		{ 
		if ( autoTabSwitch() ) 
			{
			// alert ( 'Activating Tab '+id);
			selectTab ( id );
			}
		}
	function selectPictoTab ( id ) 
	{ 
	if ( dijit.byId(getPictoTabContainerId() ))
			{
				dijit.byId(getPictoTabContainerId()).selectChild(dijit.byId( id )); 
			}
			else
			{
				// handle
			}	
	}
	function selectInfoTab ( id ) 
	{ 
	if ( dijit.byId(getInfoTabContainerId() ))
			{
				dijit.byId(getInfoTabContainerId()).selectChild(dijit.byId( id )); 
			}
			else
			{
				// handle
			}	
	}
	function selectTab ( id ) 
	{ 
	if ( dijit.byId(getTabContainerId() ))
			{
				dijit.byId(getTabContainerId()).selectChild(dijit.byId( id )); 
			}
			else
			{
				// handle
			}	
	}
	
	function loadEditorStyle()
	{
		if ( getSignId() > 0 )
		{
		progressPushLoad ( 'editor', 'Textkonfiguration' );
		xhrGetDelayed ( 'editor'+queryStringExtd(), 'gotEditorStyle' );
		}
	}
	
	function xhrGetDelayed ( uri, callback )
	{
		// setTimeout ( 'sign.xhrGet("'+uri+'","'+callback+'")', 100 );
		// setTimeout ( 'sign.noop()', 100 );
		// showProgressWindow();
		// setTimeout( function() { noop(); }, 500 );
		// showProgressWindow();
		// setTimeout( function() { noop(); }, 500 );
		// xhrGet ( uri, callback );
		// if ( timeOutEnabled() )
		if ( delayedRequestEnabled() )
		{
			// setTimeout( function() { xhrGetAsync ( uri, callback ) }, 2000 );
			setTimeout( function() { xhrGetSync ( uri, callback ) }, 2000 );
		}
		else
		{
			 xhrGet ( uri, callback );
		}
	}
	
	function setLoadedPictoGroups ( n )
	{
	pig_loaded = n;
	}

	function incLoadedPictoGroups()
	{
	pig_loaded++;
	}

	function getLoadedPictoGroups()
	{
	return pig_loaded;
	}
	
	function getPostLogin ()
	{
		return post_login;
	}
	
	function getPictoTabContainerId()
	{
		return "PiktoTabs";
	}
	
	function getInfoTabContainerId()
	{
		return "NavTabs";
	}
	
	function setUser ( new_user )
	{
		user = new_user;
	}
	
	function getUser ()
	{
		return user;
	}
	
	function autoTabSwitch() 
	{
		return autoTabSwitchEnable;
	}
	
	function announceEnabled() { return true;  }
	
	function setStaffel ( new_staffel )
	{
		// http://www.quirksmode.org/js/associative.html
		debug ( 'setStaffel()');
		// console.log ( new_staffel );
		staffel = new_staffel;
		if ( staffel.s11t20 > 0 )
		{
			dojo.byId('ScalePriceContainer').innerHTML = '';
			var cells= new Array();
			cells['s1t10'] = '1-10';
			cells['s11t20'] = '11-20';
			cells['s21t30'] = '21-30';
			cells['s31t50'] = '31-50';
			cells['s51t100'] = '51-100';
			cells['s101t150'] = '101-150';
			cells['s151'] = 'ab 151';
			debug ( 'setStaffel() show scaleArea ('+staffel.s11t20+')');
			elementShow ( 'ScalePriceArea' );
			container = dojo.byId('ScalePriceContainer');
			var scaleTableContainer = document.createElement ( 'table' );
			var scaleTable = document.createElement ( 'tbody' );
			var scaleHead = document.createElement ( 'tr' );
			var scaleRow = document.createElement ( 'tr' );
			//scaleTable.setAttribute ( 'class', 'scaleTable');
			scaleTable.className = 'scaleTable';
			var hiCell = true;
			var className;
			for (var c in cells )  
			{
			if ( staffel[c] > 0 )
			{
			hiCell = !hiCell;
			className = 'scaleHi';
			if ( !hiCell ) 
			{
				className = 'scaleLo';
			}
			var scaleDataCell = document.createElement ( 'td' );
			var scaleHeadCell = document.createElement ( 'td' );
			scaleDataCell.className = className;
			scaleHeadCell.className = className;
			
			if ( dojo.isIE )
			{
				scaleDataCell.style.cssText = "text-align: right";
				scaleDataCell.style.cssText = "text-align: right";
			}
			else
			{
				scaleHeadCell.setAttribute ( 'style', 'font-weight: bold' );
				scaleDataCell.setAttribute ( 'style', 'text-align: right' );
			}
			// scaleDataCell.setAttribute ( 'class', className );
			
			
			
			// scaleHeadCell.setAttribute ( 'class', className );
			// console.log ( c );
			scaleDataCell.innerHTML = staffel[c]+' &euro;&nbsp;';
			scaleRow.appendChild ( scaleDataCell );
			scaleHeadCell.innerHTML = '&nbsp;'+cells[c]+' ST&nbsp;';
			scaleHead.appendChild ( scaleHeadCell );
			}
			}
			
			scaleTable.appendChild ( scaleHead );
			scaleTable.appendChild ( scaleRow );
			scaleTableContainer.appendChild ( scaleTable );
			container.appendChild ( scaleTableContainer );
			
		}
		else
		{
			debug ( 'setStaffel() hide scaleArea ('+staffel.s11t20+')');
			elementHide ( 'ScalePriceArea' );
			dojo.byId('ScalePriceContainer').innerHTML = '';
		}
	}
	
	function getAP()
	{
	}
	
	function signChanged()
	{
	debug ( 'signChanged()');
	configured = ( ( getSignId() > 0 ) || ( getSignId() == 'K' ) );
	if ( configured ) 
		{
		debug ( 'signChanged() sign is configured' );
		elementHide ( 'OrderNoSelect' );
		elementShow ( 'OrderDoSelect' );
		}
	else
		{
		debug ( 'signChanged() sign is *not* configured (signid '+getSignId()+')');
		elementShow ( 'OrderNoSelect' );
		elementHide ( 'OrderDoSelect' );
		}
    if ( dijit.byId('basketButton') ) 
    	{
    	dijit.byId('basketButton').setAttribute ( 'disabled', !configured );
    	}
    else
    	{
    	// handle
    	}
	}
	
	function setCurrentItem ( c_item )
	{
		current_item = c_item;
	}
	
	function customerLoggedIn()
	{
		debug ( 'customerLoggedIn() length='+debitor.length);
		return ( debitor.length > 0 );
	}
	
	function setDebitor ( deb )
	{
		debug ( 'setDebitor() debitor='+deb);
		debitor = deb;
	}
	
	function getDebitor()
	{
		return debitor;
	}
	
	function setSignHasText ( state )
	{
	sign_has_text = state;
	}
	
	function getSignHasText()
	{
	return sign_has_text;
	}
	
	function setStatus ( s_text )
	{
	var status_text = dojo.byId('StatusArea');
	status_text.innerHTML = s_text;
	}

function encode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

	
	
	function pictogramsLoaded()
	{
	return getLoadedPictoCount() > 0;
	}
	
	/* --------------------------------------------------
	   private methods
	   -------------------------------------------------- */
	function isFullyConfigured()
	{
	return false;	
	}
	
	function setFont ( id )
	{
	font = id;
	}
	
	function getFont ( id )
	{
	return font;
	}
	
	function numOfPictosDefined()
	{
		var count = 0;
		// dont count element 0
		if ( picto[1] > 0 ) count++;
		if ( picto[2] > 0 ) count++;
		return count;
	}
	
	function setPicto ( id, pos )
	{
	picto[pos] = id;
	updatePrice();
	// DefaultSign
	loadEditorStyle();
	}
	
	function setResetOnSelect ( b )
	{
	reset_on_select = b;
	}
	
	function resetOnSelectEnabled()
	{
	return reset_on_select;
	}
	
	function signAlert( title, msg )
	{
	id_msgbox  = 'MessageDialog';
	id_msgarea = 'MessageText';
	msgbox = dijit.byId ( id_msgbox );
	if ( msgbox != null )
	{
	text   = dojo.byId ( id_msgarea );
	msgbox.params.title = title;
	msgbox.setAttribute = ( 'title', title );
	text.innerHTML = msg;
	// console.log ( msgbox );
	dijit.byId( id_msgbox ).show();
	}
	else
	{
		alert ( msg );
	}
	}
	
	function setLoadedPictoCount ( n )
	{
	picto_loaded = n;
	if ( getSignId() > 0 )
	{
	setInfoText ( 'LoadedPicto', picto_loaded+ ' f&uuml;r '+getSignId() );
	}
	else
	{
		setInfoText ( 'LoadedPicto', '-' );
	}
	}
	
	function incLoadedPictoCount ( n )
	{
	setLoadedPictoCount ( getLoadedPictoCount()+n );
	}
	
	function getLoadedPictoCount()
	{
	return picto_loaded;
	}
	   
	function submitSignAndValidate()
	{
	debug ( 'submitSignAndValidate()' );
	if ( isFullyConfigured() == false )
		{
		// signAlert ( 'Warenkorb', 'Fehler: Das Schild wurde nicht konfiguriert.' );
		progressPushTransfer ( 'submitsign', 'Schilddaten' );
		xhrGetDelayed ( 'basketadd'+queryStringExtd(), 'gotSignSubmitResponse' );				
		}
		else
		{
		// sign.reset();
		}
	}	   
	
	function setBasketCount ( c )
	{
		basket_count = c;
	}
	
	function getBasketCount ()
	{
		return basket_count;
	}
	
	function showOrderPlacedDialog()
	{
		var adwordsdata = '?label=wik2CImInAEQh4fX9QM&value='+total_basket_sum;
		dijit.byId('ShippingDialog').hide();
                dojo.byId('adwordsImage').src = 'http://www.googleadservices.com/pagead/conversion/1052099463/'+adwordsdata;
		dijit.byId('OrderReceivedDialog').show();
	}
	
	function showNewCustomerDialog()
	{
		announce ( 'NEWCUST', '', '' );
		dijit.byId('CustomerB2B').checked = false;
		dijit.byId('CustomerNewsletter').checked = false;
		dijit.byId('CustomerNewsletter').setValue ( false );
		dijit.byId('CustomerB2B').setValue ( false );
		dijit.byId('AuthDialog').hide();
		dijit.byId('NewCustomerDialog').show();
	}
	
	function gotCreateCustomerResponse ( response, ioArgs )
	{
		progressPop ( 'createcustomer' );
		if ( response.items.length != 1 )
		{
			alert ( '001 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		// console.log ( 'responseObj:' );
		// console.log ( response.items[0] );
		// console.log ( 'success='+response.items[0].success );
		// console.log ( 'msg='+response.items[0].msg );	
		if ( response.items[0].success == 0 )
			{
			signAlert ( 'Info', response.items[0].msg );
			}
			else
			{
			showNewCustomerDialog();
			}
		}
	}
	
	function gotCreateNewCustomerResponse ( response, ioArgs )
	{
		progressPop ( 'createnewcustomer' );
		if ( response.items.length != 1 )
		{
			alert ( '002 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		// console.log ( 'responseObj:' );
		// console.log ( response.items[0] );
		// console.log ( 'success='+response.items[0].success );
		// console.log ( 'msg='+response.items[0].msg );	
		if ( response.items[0].success == 0 )
			{
			signAlert ( 'Info', response.items[0].msg );
			}
			else
			{
			dijit.byId('NewCustomerDialog').hide();
			loadCustomerData();
			sign.selectCheckout();
			}
		}
	
	}
	
	
	function gotOrderResponse ( response, ioArgs )
	{
		progressPop ( 'order' );
		debug ( 'gotOrderResponse() * RECEIVED ORDER RESPONSE *' );
		debug ( 'items='+response.items.length );
		debug ( 'gotOrderResponse() done.' );
		// console.log ( response.items[0]);
		debug ( 'gotOrderResponse() returned from progressPop()' );
		
		if ( response.items.length != 1 )
		{
			alert ( '003 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		// console.log ( 'responseObj:' );
		// console.log ( response.items[0] );
		// console.log ( 'success='+response.items[0].success );
		// console.log ( 'msg='+response.items[0].msg );	
		if ( response.items[0].success == 0 )
			{
			signAlert ( 'Info', response.items[0].msg );
			}
			else
			{
			showOrderPlacedDialog();
			sign.flushBasket();
			// loadCustomerData();
			}
		}
		 
	}
	
	function gotAP ( response, ioArgs )
	{
	dojo.byId('APSelectContainer').innerHTML = '';
    	var apinput = document.createElement("select");
	var iehtml  = '';
	apinput.name = 'ap'; 
	for ( i = 0; i < response.items.length; i++ )
		{
		if ( dojo.isIE )
			{
			iehtml += '<option value="'+response.items[i].ap+'">'+response.items[i].ap+' '+response.items[i].kname+'</option>';
			}
		else
			{
	    		var apoption = document.createElement("option");
			apoption.value = response.items[i].ap;
			apoption.text = response.items[i].ap+' '+response.items[i].kname;
	 		apinput.appendChild ( apoption );
			}
		}

	if ( dojo.isIE )
		{
		dojo.byId('APSelectContainer').innerHTML = '<select name="ap">'+iehtml+'</select>';
		dojo.byId('selaptxt').innerHTML = 'Bitte w&auml;hlen Sie Ihren Ansprechpartner aus:';
		dojo.byId('selaptxt').setAttribute ( 'style', 'color: #111111;' );
		}
		else
		{
        	dojo.byId('APSelectContainer').appendChild(apinput);
		}

	showSelectAPDialog();
	}

	function gotAP_old ( response, ioArgs )
	{
	debug ( 'gotAP() items='+response.items.length );
	console.log ( response );
	dojo.byId('APSelectContainer').innerHTML = '';
	for ( i = 0; i < response.items.length; i++ )
	{
		debug ( 'gotAP() item #'+i);
	if ( response.items[i] )
		{
		var radioButton = null;
		var radioID = 'selAp'+response.items[i].ap;
       		var span = document.createElement("div");
	        var innerSpan = document.createElement("span");
       		// radioButton = document.createElement("input");
       		radioButton = dojo.doc.createElement("input");
       		radioButton.name = "apXXX";
		if ( dojo.isIE )
		{
		radioButton.setAttribute ( 'name', 'ap');
		}
        	radioButton.type = "radio";
	        radioButton.value = response.items[i].ap;
		// adioButton.id = radioID;
		// dijit.byId(radioID).setAttribute ( 'disabled', false ); 
		if ( i == 0 ) 
		{
			radioButton.checked = true; 
		}

	        // dojo.style(radioButton, "verticalAlign", "middle");
	        innerSpan.innerHTML = '&nbsp;'+response.items[i].ap+' '+response.items[i].kname;
       		// dojo.connect(radioButton, "onclick", function(){ alert('CLICKED!'); });
	      	span.appendChild(radioButton);
        	span.appendChild(innerSpan);
	        dojo.byId('APSelectContainer').appendChild(span);
		}
		else
		{
		alert ( 'Huuh! Item# '+i+' not found!' );
		}
	}   
		 
		showSelectAPDialog();
	}
	
	function showSelectAPDialog()
	{
	announce ( 'SELAP', '', '' );
        dijit.byId('SelectAPDialog').show();
	}
	
	function gotRecommResponse ( response, ioArgs )
	{
		progressPop ( 'recomm' );
	}

	function gotLoginResponse ( response, ioArgs )
	{
		// alert ( 'gotLoginResponse() length='+response.items.legnth );
		debug ( 'gotLoginResponse() * RECEIVED LOGIN RESPONSE *' );
		debug ( 'items='+response.items.length );
		debug ( 'gotLoginResponse() done.' );
		// console.log ( response.items[0]);
		progressPop ( 'login' );
		debug ( 'gotLoginResponse() returned from progressPop()' );
		
		if ( response.items.length != 1 )
		{
			alert ( '004 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		// console.log ( 'responseObj:' );
		// console.log ( response.items[0] );
		// console.log ( 'success='+response.items[0].success );
		// console.log ( 'msg='+response.items[0].msg );	
		// alert ( response.items[0].msg );
		if ( response.items[0].success == 0 )
			{
			signAlert ( 'Info', response.items[0].msg );
			// sign.showAuthDialog();			
			}
			else if ( response.items[0].success == 2 )
			{	
			loadAP();
			}
			else
			{
			loadCustomerData();
			// alert ( getPostLogin() );
			eval ( getPostLogin() );
			}
		}
		 
	}
	
	function loadAP ()
	{
		debug ( 'loadAP() user='+getUser() );
		xhrGet ( 'custenumerateap/user/'+getUser(), 'gotAP' );
	}
	
	
	
	function gotCustomerData ( response, ioArgs )
	{
		debug ( 'gotCustomerData() * RECEIVED CUSTOMER DATA *' );
		debug ( 'items='+response.items.length );
		debug ( 'gotCustomerData() done.' );
		// console.log ( response.items[0]);
		progressPop ( 'customer' );
		progressPop ( 'logout' );
		progressPop ( 'login' );
		paintCustomerData ( response.items[0] );
		debug ( 'gotCustomerData() returned from progressPop()' ); 
	}
	
	function paintCustomerData ( customer )
	{
		debug ( 'paintCustomerData()');
		// console.log ( customer );
		debug ( 'customer.debitor='+customer.debitor );
		setDebitor ( customer.debitor );
		dojo.byId('CustomerContainer').innerHTML= '';
		if ( customerLoggedIn() )
		{
		debug ( 'customer_logged_in');
		var customerTableContainer = document.createElement ( 'table' );
		var customerTable = document.createElement ( 'tbody' );
		// customerTable.setAttribute ( 'class', 'customerTable' );
		customerTableContainer.appendChild ( customerTable );
		customerTable.className = 'customerTable';
		customerTable.id = 'customerTable';
		dojo.byId('CustomerContainer').appendChild ( customerTableContainer );
		paintCustomerItem ( 'Hi', 'Typ', customer.custtype );
		paintCustomerItem ( 'Lo', 'Konto', customer.account );
		paintCustomerItem ( 'Hi', 'Name', customer.name );
		paintCustomerItem ( 'Lo', 'Anrede', customer.ge );
		paintCustomerItem ( 'Hi', 'Partner', customer.vname+' '+customer.pname );
		paintCustomerItem ( 'Lo', 'Kundennr.', customer.debitor );
		paintCustomerItem ( 'Hi', 'Telefon', customer.phone );
		paintCustomerItem ( 'Lo', 'Strasse', customer.street );
		paintCustomerItem ( 'Hi', 'Stadt', customer.city );
		paintCustomerItem ( 'Lo', 'Land', customer.country );
		paintCustomerItem ( 'Hi', 'Angemeldet', customer.loggedin );
		elementHide ( 'loginArea' );
		elementShow ( 'logoutArea' );
		}
		else
		{
		debug ( 'customer_not_logged_in');
		var customerInfo = document.createElement ( 'div' );
		customerInfo.innerHTML = 'Sie sind nicht angemeldet';
		
		if ( dojo.isIE )
		{
			customerInfo.style.cssText = "padding: 5px; margin: 5px; text-align: center";
		}
		else
		{
			customerInfo.setAttribute ( 'style', 'padding: 5px; margin: 5px; text-align: center;');
		}
		
		dojo.byId ( 'CustomerContainer' ).appendChild ( customerInfo );
		elementHide ( 'logoutArea' );
		elementShow ( 'loginArea' );
		}
	}
	
	function paintCustomerItem ( classAddOn, topic, value )
	{
		debug ( 'paintCustomerItem() topic='+topic+', value='+value);
		var customerLine = document.createElement ( 'tr' );
		var customerTopic = document.createElement ( 'td' );
		var customerValue = document.createElement ( 'td' );
		customerTopic.innerHTML = topic+':';
		customerValue.innerHTML = value;
		// customerLine.setAttribute ( 'class', 'customerRow'+classAddOn );
		customerLine.className = 'customerRow'+classAddOn;
		debug ( 'paintCustomerItem() appending customerTopic '+topic+'...');
		customerLine.appendChild ( customerTopic );
		debug ( 'paintCustomerItem() appending customerValue '+value+'...');
		customerLine.appendChild ( customerValue );
		debug ( 'paintCustomerItem() appending customerLine...');
		dojo.byId('customerTable').appendChild ( customerLine );
	}
	
	function gotBasketZoomItem ( response, ioArgs )
	{
		progressPop ( 'basketzoom' );

		debug ( 'gotBasketZoomItem() * RECEIVED BASKET ZOOM ITEM RESPONSE *' );
		debug ( 'items='+response.items.length );
		if ( response.items.length != 1 )
			{
			alert ( '005 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
			}
			else
			{
			// console.log ( 'responseObj:' );
			// console.log ( response.items[0] );
			// console.log ( 'success='+response.items[0].success );
			// console.log ( 'msg='+response.items[0].msg );	
			if ( response.items[0].success == 0 )
			{
				signAlert ( 'Info', response.items[0].msg );
			}
			else
			{
				dojo.byId('zoomItemInfo').innerHTML = 'Detailansicht der Position '+(parseInt(response.items[0].id)+1)+' Ihres Warenkorbs:';
				dojo.byId('zoomItemSign').innerHTML = response.items[0].txtbase;
				dojo.byId('zoomItemFormat').innerHTML = response.items[0].txtformat;
				dojo.byId('zoomItemBaseColor').innerHTML = response.items[0].txtbacol;
				dojo.byId('zoomItemBorderColor').innerHTML = response.items[0].txtbocol;
				dojo.byId('zoomItemMaterial').innerHTML = response.items[0].txtmat;
				dojo.byId('zoomItemLayout').innerHTML = response.items[0].txtlayout
				dojo.byId('zoomItemFont').innerHTML = response.items[0].txtfont;
				dojo.byId('zoomItemText').innerHTML = response.items[0].text;
				dojo.byId('zoomItemArtNo').innerHTML = response.items[0].artno;
				dojo.byId('zoomItemPikto1').innerHTML = response.items[0].txtp1;
				dojo.byId('zoomItemPikto2').innerHTML = response.items[0].txtp2;
				dojo.byId('zoomItemQty').innerHTML = response.items[0].qty+' ST';
				dojo.byId('zoomItemPrice').innerHTML = response.items[0].price+' EUR';
				dojo.byId('zoomItemTotal').innerHTML = response.items[0].total+' EUR';
				dojo.byId('zoomItemImage').src = sign.getPreviewURL()+response.items[0].url;
				dojo.byId('zoomItemImageURL').innerHTML = ''; 
					// sign.getPreviewURL()+response.items[0].url;
				debug ( 'zoomItemImage='+dojo.byId('zoomItemImage').src);
				dijit.byId('basketZoomDialog').show();
			}
			}

	}
	
	function gotBasket ( response, ioArgs )
	{
		debug ( 'gotBasket() * RECEIVED BASKET RESPONSE *' );
		debug ( 'items='+response.items.length );
		setBasketCount ( response.items.length );
		paintBasket ( response.items );
		debug ( 'gotBasket() done.' );
		progressPop ( 'basket' );
		debug ( 'gotBasket() returned from progressPop()' ); 
	}
	
	function gotRepo ( response, ioArgs )
	{
		progressPop ( 'repo' );
		debug ( 'items='+response.items.length );
		item = response.items[0];
		console.log ( item );
		setBaseform ( item.baseid );
		setMaterial ( item.matid );
		setFormat ( item.formid );
		setBorderColor ( item.bocolid );
		setBaseColor ( item.bacolid );
		setLayout ( item.layoutid );
		sign.selectPictogramPos ( item.p1, '', 1 );
		sign.selectPictogramPos ( item.p2, '', 2 );
		setText ( item.text );
		sign.refreshPreview();
		// setMatNr ( item.artno );
		// setSignId ( item.signid );
	}
	
	function loadBasket()
	{
		progressPushLoad ( 'basket', 'Warenkorb' );
		xhrGetDelayed ( 'basket', 'gotBasket' );
	}
	
	function loadCustomerData()
	{
		progressPushLoad ( 'customer', 'Kundendaten');
		xhrGetDelayed ( 'customer', 'gotCustomerData' );
	}
	
	function gotSignSubmitResponse ( response, ioArgs )
	{
	debug ( 'gotSignSubmitResponse() * RECEIVED SIGNSUBMIT RESPONSE *' );
	debug ( 'items='+response.items.length );
	// console.log ( response.items );
	loadBasket();
	debug ( 'gotSubmitSignResponse() done.' );
	progressPop ( 'submitsign' );
	debug ( 'gotSignSubmitResponse() returned from progressPop()' );


	if ( response.items.length != 1 )
		{
		alert ( '006 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		// console.log ( 'responseObj:' );
		// console.log ( response.items[0] );
		// console.log ( 'success='+response.items[0].success );
		// console.log ( 'msg='+response.items[0].msg );	
		if ( response.items[0].success == 0 )
		{
			signAlert ( 'Info', response.items[0].msg );
		}
		else
		{
			sign.selectBasketAction();
		}
		}
	}
	
	
	function tabContainerSelectFirst()
	{
	debug ( 'tabContainerSelectFirst()' );
	// var widget = dojo.widget.byId ( id_tab_cont );
	var widget = dojo.byId ( 'verbotTab' ).getParent();
	if ( widget == null ) 
		{
		debug ( 'no such widget: '+id_tab_cont );
		}
		else
		{
		widget.selectChild(dojo.byId('verbotTab'));
		}
	}
	   
	function requestBasket()
	{
	debug ( 'requestBasket()' );
	}	
	
	function setSignId ( id )
	{
	sign_id = id;
	signChanged();
	}
	
	function setMatNr ( nr )
	{
	mat_nr = nr;
	}
	
	function getMatnr ()
	{
	return mat_nr;
	}
	
	function getSignId ()
	{
	return sign_id;
	}
	
	function getTabContainerId()
	{
	return id_tab_cont;
	}
	
	function setInfoText ( id_suffix, text )
	{
	debug ( 'setInfoText() id_suffix='+id_suffix+', text='+text );	
	id = getInfoIdPrefix()+id_suffix;
	debug ( 'setInfoText() id='+id+', text='+text );
	dojo.byId ( id ).innerHTML = text;
	debug ( 'setInfoText() query: '+queryString() );
	}
	
	function queryUuid()
	{
	var uuid = new Date().getTime();
	return '/uuid/'+uuid;
	}
	
	function getInfoIdPrefix()
	{
	return id_info_pre;
	}
	
	function getSelectImgBaseURL()
	{
	return selectimg_url;
	}	
	
	function createSelectionByColor ( id_base, items )
	{
	createSelection ( id_base, items, 'color' );
	}
	
	function createSelectionByImage ( id_base, items )
	{
	debug ( 'createSelectionByImage() id_base='+id_base );
	createSelection ( id_base, items, 'imagetable' );	
	}
	
	function createSelectionByTextImage ( id_base, items )
	{
	debug ( 'createSelectionByTextImage() id_base='+id_base );
	createSelection ( id_base, items, 'textimage' );
	}
	
	
	function addItemToContainer ( id_container, image_src, onclick, topic, descr )
	{
		var previewContainer = dojo.byId( id_container );
		var lineContainer  = document.createElement("a");
		//var line = document.createElement("div")
		/*;
		var image = document.createElement("img");
		var info  = document.createElement("p");
		var norm  = document.createElement("p");
		var clearDiv = document.createElement("p");
		clearDiv.setAttribute ( 'style', 'clear: left' );			
		lineContainer.setAttribute ( 'class', 'rowSelect' );
		line.setAttribute ( 'href', '#' );
		line.setAttribute ( 'onClick', onclick);
		image.src = image_src;
		image.setAttribute ( 'style', 'float: left; margin-right: 20px' );		
		image.title = topic;
		info.innerHTML = topic;
		norm.innerHTML = descr;
		info.setAttribute ( 'style', 'font-weight: bold' );
		norm.setAttribute ( 'style', 'font-size: 0.7em;' );
		line.appendChild ( image);
		line.appendChild ( info );
		line.appendChild ( norm );
		line.appendChild ( clearDiv );
		lineContainer.appendChild ( line );
		*/		
		// lineContainer.appendChild ( info );
		// lineContainer.innerHTML = topic;
		var info  = document.createElement("span");
		var norm  = document.createElement("p");		
		var clearDiv = document.createElement("div");
		var text = document.createElement("div");
		
		if ( dojo.isIE )
		{
			clearDiv.style.cssText = "clear: left"; 
		}
		else
		{
			clearDiv.setAttribute ( 'style', 'clear: left' );
		}
		
		
		
		if ( ( descr != null ) && ( descr.length > 0 ) )
			{
			info.innerHTML = topic + ' ('+descr+')';
			}
			else
			{
			info.innerHTML = topic;
			}
		info.innerHTML = topic;			
		norm.innerHTML = descr;
		if ( image_src != null )
			{
				var image = document.createElement("img");
				image.src = image_src;
				if ( dojo.isIE )
				{
					image.style.cssText = 'float: left; margin-right: 20px';
				}
				else
				{
					image.setAttribute ( 'style', 'float: left; margin-right: 20px' );
				}
				lineContainer.appendChild ( image );		
			}						
		text.appendChild ( info );
		text.appendChild ( norm);
		lineContainer.appendChild ( text );
		lineContainer.appendChild ( clearDiv );
		if ( dojo.isIE )
			{
				lineContainer.href = '#';
				lineContainer.onclick = new Function ( onclick );
			}
			else
			{
				lineContainer.setAttribute ( 'href', '#' );
				lineContainer.setAttribute ( 'onClick', onclick);
			}
		// lineContainer.setAttribute ( 'class', 'rowSelect' );
		lineContainer.className = 'rowSelect';
		previewContainer.appendChild ( lineContainer );
		// previewContainer.appendChild ( line );
	}
	
	function createTooltip(target_id, content)
	{
	return;
	//prepending 'tt_' to distinguish between target and tooltip id's
	var obj = document.getElementById('tt_'+target_id); 
 
	if(obj != null)
		obj.parentNode.removeChild(obj);
 
	var tooltip = dojox.widget.createWidget('tooltip', 
		{ 
		caption: content, 
		connectId: target_id 
		});
 
	tooltip.domNode.id = 'tt_'+target_id;
	document.body.appendChild(tooltip.domNode);
	}
		
	
	function createSelection ( id_base, items, mode )
	{
	debug ( '**************************************************' );
	debug ( 'createSelection() id_base='+id_base );
	var onclick      = 'sign.select'+id_base;
	var id_container = id_base+'Container';
	var j = 0;
	var onclick_cmd  = '';
	debug ( 'createSelection() id_container: '+id_container );
	debug ( 'createSelection() onclick: '+onclick );	
	if  ( items.length == 0 )
		{
		dojo.byId ( id_container ).innerHTML = 'Aufgrund Ihrer vorherigen Auswahl steht dieser Punkt nicht zur Verf&uuml;gung.';
		}
		else
		{
		dojo.byId ( id_container ).innerHTML = '';	
		}

	// alert ( 'createSelection() mode='+mode+', container='+id_container+', items='+items.length );

	var cell_count = 0;
	var row_id = 0;
	
	if ( mode == 'textimage' )
	{
		var table = document.createElement("table");
		var tableBody = document.createElement("tbody");
		var tableContainer = dojo.byId ( id_container );
		table.className = 'selectionTable';
		if ( tableContainer == null )
		{
			alert ( 'Error: Table container not found!');
		}
		table.appendChild ( tableBody );
		tableContainer.appendChild ( table );
	}
	
	
	if ( mode == 'color' )
	{
		var table = document.createElement("table");
		var tableBody = document.createElement("tbody");
		var tableRow = document.createElement("tr");
		var tableContainer = dojo.byId ( id_container );
		if ( tableContainer == null )
		{
			alert ( 'Error: Table container not found!');
		}
		tableBody.appendChild ( tableRow );
		table.appendChild ( tableBody );
		tableContainer.appendChild ( table );
	}
		

	if ( mode == 'imagetable' )		
		{
		var previewContainer = dojo.byId( id_container );
		if ( previewContainer == null )
			{
				alert ( 'previewContainer == null');
			}
			else
			{
				id_container = id_container+'_table';
				var tableContainer = document.createElement("table");
				// tbody tag required for IE
				var table = document.createElement("tbody");
				tableContainer.appendChild ( table );
				
				if ( table == null )
					{
					alert ( 'table == null');
					}
					{
					table.id = id_container;		
					
					// FOR IE
					// table.setAttribute ( 'class', 'imageMapTable' );
					table.className = 'imageMapTable';
					
					previewContainer.appendChild ( tableContainer );
					// previewContainer.innerHTML = previewContainer.innerHTML + 'X';
					}
			}
		
		}
		
	var previewContainer = dojo.byId( id_container );
	if ( previewContainer != null )
	for ( i = 0; i < items.length; i++ )
		{
		var item = items[i];
		if ( item.id == null ) 
			{
			alert ( 'Error while createSelection() item.id of '+item.name+' is null!' );
			}
		onclick_cmd = onclick+'("'+item.id+'","'+item.name+'")';
		debug ( 'createSelection() mode='+mode+', item #'+i+', id '+item.id+', mode: '+mode );
		debug ( 'createSelection() onclick: '+onclick_cmd );				
		switch ( mode )
			{
			case 'imagetable':			
				var cell = document.createElement("td");
				var link = document.createElement("a");
				var text = document.createElement("div");		
				var descr = document.createElement("div");
				var image_container =  document.createElement("div");		
				var image =  document.createElement("img");
				var tooltip = document.createElement("span");
				var action = document.createElement('div');
				
				action_id = id_container+'_a_'+i;
				action.innerHTML = 'Info';
				
				if ( dojo.isIE )
				{
					action.id = action_id;
				}
				else
				{
					action.setAttribute ( 'id', action_id );
				}
				
				action.className = 'ActionInfo';
				// action.setAttribute ( 'class', 'ActionInfo' );
				
				tooltip.innerHTML = 'w&auml;hlen';
								
				image.src = getSelectImgBaseURL()+item.image;
				image.border = 0;						

				var item_label;
				if ( ( item.descr != null ) && ( item.descr.length > 0 ) )
					{
					item_label = item.name + ' ('+item.descr+')';
					}
					else
					{
					item_label = item.name;
					}
				
				text.innerHTML = item_label; 			

				
				
				if ( dojo.isIE )
				{
					link.href = '#';
					link.onclick = new Function ( onclick_cmd );
				}
				else
				{
					link.setAttribute ( 'href', '#' );
					link.setAttribute ( 'onClick', onclick_cmd );
					link.setAttribute ( 'onMouseOver', "sign.setStatusText('"+item_label+"');" );
					link.setAttribute ( 'onMouseOut', "sign.setStatusText();" );
				}
				
				// link.setAttribute ( 'onMouseOver', 'dojo.byId("'+action_id+'").style.visibility="visible";' );
				// link.setAttribute ( 'onMouseOut', 'dojo.byId("'+action_id+'").style.visibility="hidden";' );				
				//link.setAttribute ( 'class', 'imageMapCell tooltip' );
				link.className = 'imageMapCell tooltip';
				
				// no tooltip
				// link.appendChild ( tooltip );
				
				//link.appendChild ( image );
				//link.appendChild ( text );
				image_container.appendChild ( image );
				
				
				// text.setAttribute ( 'class', 'imageNameArea' );
				text.className = 'imageNameArea';
				descr.innerHTML = item.descr;
				// descr.setAttribute ( 'class', 'imageDescrArea' );
				descr.className = 'imageDescrArea';
				// text.setAttribute ( 'style', 'font-weight: bold; color: #000000; text-decoration: none' );
				// text.setAttribute ( 'href', '#' );
				//text.setAttribute ( 'onClick', onclick_cmd );
				
				link.appendChild ( image_container );
				link.appendChild ( text );
				// link.appendChild ( descr );
				
				//var hover = document.createElement("div");
				//hover.setAttribute ( 'class', 'imageSelectArea' );
				//hover.innerHTML = 'TEXT';
				
				//link.appendChild ( hover );
				// cell.appendChild ( action );
				cell.appendChild ( link);
				// cell.appendChild ( hover );
				//cell.appendChild ( image_container );
				//cell.appendChild ( text );

				cell_count++;								
				if ( cell_count == 4 ) cell_count = 1;
				if ( cell_count == 1 )
					{
					row_id++;
					var table_row =  document.createElement("tr");					
					current_row = id_container+'_row_'+row_id;
					table_row.id = current_row;
					previewContainer.appendChild ( table_row );					
					}					
				
				// if ( ( row_id % 2 ) == 0 )
				if ( ( i % 2 ) == 0 )
					{
					// cell.setAttribute ( 'class', 'imageRowHi' );
					cell.className = 'imageRowHi';
					}
					else
					{
					// cell.setAttribute ( 'class', 'imageRowLo' );
					cell.className = 'imageRowLo';
					}
					
				table_row.appendChild ( cell );
				break;
			case 'image':												
				var previewContainer = dojo.byId( id_container );
				var lineContainer    = document.createElement("div");
				var line     = document.createElement("a");
				var image    = document.createElement("img");
				// var tooltip  = document.createElement("span");
				var norm     = document.createElement("p");
				var clearDiv = document.createElement("p");
				target_id = 'selimg'+i;
				lineContainer.className = 'imageSelect';
				//lineContainer.setAttribute ( 'class', 'imageSelect' );				
				
				if ( dojo.isIE )
				{
				clearDiv.style.cssText = "clear: left";
				line.href = '#';
				line.id = target_id;
				line.onclick = new Function ( onclick_cmd );
				image.style.cssText = 'float: left; margin-right: 20px';
				}
				else
				{
				clearDiv.setAttribute      ( 'style', 'clear: left' );
				line.setAttribute ( 'href', '#' );
				line.setAttribute ( 'id', target_id );				
				line.setAttribute ( 'onClick', onclick_cmd);
				image.setAttribute ( 'style', 'float: left; margin-right: 20px' );
				}
				
				// line.innerHTML = getSelectImgBaseURL()+item.image;
				image.src = getSelectImgBaseURL()+item.image;
						
				image.title = item.name;
				line.appendChild ( image );
				lineContainer.appendChild ( line );
				
				createTooltip ( target_id, 'Test' ); 
				
				// <span dojoType="dijit.Tooltip" connectId="three" id="three_tooltip">tooltip on a link </span>
				 
				previewContainer.appendChild ( lineContainer );									
				break;
			case 'text':
				break;
			case 'color':
				// var tableContainer = dojo.byId( id_container );
				onclick_cmd = onclick+'("'+item.id+'","'+item.name+'","'+item.color+'")';
				if ( tableRow == null )
				{
					alert ( 'previewContainer not found.');
				}
				else
				{
					var colorArea = document.createElement("td");
					var colorLink = document.createElement("a");
					// colorArea.setAttribute ( 'class', 'colorSelect' );
					colorArea.className = 'colorSelect';
					// colorLink.setAttribute ( 'class', 'colorSelectLink' );
					colorLink.className = 'colorSelectLink';
					if ( dojo.isIE )
					{
						colorLink.style.cssText = 'background-color: #'+item.color;
						colorLink.href = '#';	
						colorLink.onclick = new Function ( onclick_cmd );
						colorLink.title = item.name;
					}
					else
					{
						colorLink.setAttribute ( 'href', '#' );	
						colorLink.setAttribute ( 'style', 'background-color: #'+item.color+';' );
						colorLink.setAttribute ( 'onClick', onclick_cmd );
						colorLink.setAttribute ( 'title', item.name );
					}
				colorLink.innerHTML = '';
				colorArea.appendChild ( colorLink );
				tableRow.appendChild ( colorArea );
				}
				break;
			case 'color2':				
				var previewContainer = dojo.byId( id_container );
				onclick_cmd = onclick+'("'+item.id+'","'+item.name+'","'+item.color+'")';

				if ( previewContainer == null )
				{
					alert ( 'previewContainer not found.');
				}
				else
				{
					var colorArea = document.createElement("span");
					var colorLink = document.createElement("a");
					// colorArea.setAttribute ( 'class', 'colorSelect' );
					colorArea.className = 'colorSelect';
					// colorLink.setAttribute ( 'class', 'colorSelectLink' );
					colorLink.className = 'colorSelectLink';
					if ( dojo.isIE )
					{
						colorLink.style.cssText = 'background-color: #'+item.color;
						colorLink.href = '#';	
						colorLink.onclick = new Function ( onclick_cmd );
						colorLink.title = item.name;
					}
					else
					{
						colorLink.setAttribute ( 'href', '#' );	
						colorLink.setAttribute ( 'style', 'background-color: #'+item.color+';' );
						colorLink.setAttribute ( 'onClick', onclick_cmd );
						colorLink.setAttribute ( 'title', item.name );
					}
				colorLink.innerHTML = '';
				colorArea.appendChild ( colorLink );
				previewContainer.appendChild ( colorArea );
				}
				break;
			case 'textimage':
				var tableContainer = dojo.byId ( id_container );
				var containerDiv = document.createElement("div");
				var topicDiv = document.createElement("div");
				var descrDiv = document.createElement("div");
				var cellLink = document.createElement("a");
				var tableCell = document.createElement("td");
				var tableImage = document.createElement("img");
				if ( dojo.isIE )
				{
					cellLink.href = '#';
					cellLink.onclick = new Function ( onclick_cmd );
					tableCell.onclick = new Function ( onclick_cmd );
				}
				else
				{
					cellLink.setAttribute ( 'href', '#' );
					cellLink.setAttribute ( 'onClick', onclick_cmd);
					tableCell.setAttribute ( 'onClick', onclick_cmd);
				}
				cellLink.innerHTML = item.name;
				topicDiv.appendChild ( cellLink );
				descrDiv.innerHTML =item.descr;
				// tableContainer.appendChild ( dummyDiv );
				if ( ( i % 2 ) == 0  )
				{
					var tableRow = document.createElement("tr");
				}
				
		
				tableRow.className = 'selectionRow';
				tableCell.className = 'selectionCell';	

				// alert(item.name);
				// cellLink.innerHTML = item.name+'XXX';
				
				// tableCell.appendChild ( cellLink );
				
				if ( item.image )
				{
					containerDiv.className = 'selectionCellText';
					tableImage.setAttribute ( 'src', item.image );
					tableImage.className = 'selectionCellImage';
					containerDiv.appendChild ( tableImage );
					containerDiv.appendChild ( topicDiv);
					containerDiv.appendChild ( descrDiv);
					var tableClear = document.createElement ( 'div' );
					tableClear.className = 'selectionCellClear';
					containerDiv.appendChild ( tableClear );
				}
				else
				{
					containerDiv.className = 'selectionCellContent';
					containerDiv.appendChild ( topicDiv);
					containerDiv.appendChild ( descrDiv);
				}
			
				
				tableCell.appendChild ( containerDiv );
				tableRow.appendChild ( tableCell );
				tableBody.appendChild ( tableRow );
				break;
			case 'textimage2':
				j++;
				if ( j == 1 )
				{
					containerName = id_container+'_'+i;
					var xdiv = document.createElement("div");
					xdiv.className = 'rowSelectContainer';	
					//xdiv.setAttribute ( 'class', 'rowSelectContainer' );
					if ( dojo.isIE )
					{
						xdiv.id = containerName;		
					}
					else
					{
						xdiv.setAttribute ( 'id', containerName );
					}
					
					dojo.byId(id_container).appendChild ( xdiv );
					var xdummy = document.createElement("div");
					
					if ( dojo.isIE )
					{
						xdummy.style.cssText = "display:block"; 
					}
					else
					{
						xdummy.setAttribute ( 'style', 'display: block' );
					}
					
					dojo.byId(id_container).appendChild ( xdummy);  
					// console.log ( 'Create '+containerName );
				}
				if ( j == 2 ) { j = 0; }
				// var item = response.items[i];
				// console.log ( 'createSelection() insert '+item.name+' into '+containerName );
				addItemToContainer ( containerName, item.image, onclick_cmd, item.name, item.descr );	
				break;
			default:
				debug ( 'createSelection() invalid mode: '+mode );
				break;			
			}
		if ( ( i == 0 ) && ( items.length == 1 ) && ( item.id != null ) )
			{
			debug ( 'createSelection() AUTOSELECT '+i+' using onClick='+onclick_cmd );
			// alert ( 'Autoselect '+onclick_cmd );
			eval ( onclick_cmd );
			}
		}

	if ( mode == "textimage" )
	{
		
	}
	
	debug ( 'createSelection() done.' );
	}
	
	function setLayout ( id )
	{
	debug ( 'setLayout() layout='+id );
	layout = id;
	updatePrice();
	loadEditorStyle();
	}
	
	function setPrice ( price )
	{
	price_pu = price;
	}
	
	//function getPrice ( price )
	//{
	//return price_pu;
	//}
	
	function errorNoMatchingSign()
	{
	debug ( 'errorNoMatchingSign()');
	}
	
	
		
	function gotPrice ( response, ioArgs )
	{
	debug ( 'gotPrice() price update received ('+response.items.length+' items)' );
	if ( response.items.length == 0) 
		{
		errorNoMatchingSign();
		flushArtInfoText();		
		}
		else
		{
		var item = response.items[0];
		// var staffel_info = 'keine Staffelpreise';
		setPrice ( item.price );
		setMatNr ( item.matnr );	
		setSignId ( item.id );
		setStaffel ( item.staffel );
		// if ( response.items.length > 1 ) staffel_info = 'Staffelpreise';
		setStatus ( 'Preis aktualisiert: '+sign.getPrice()+'&nbsp;&euro;' );
		setInfoText ( 'Price', sign.getPrice()+'&nbsp;&euro;' );
		
		// setInfoText ( 'ArtNr', '#'+sign.getMatNr()+ ' (iNr.'+item.inr+', id '+item.id+')' );
		setInfoText ( 'ArtNr', sign.getMatNr() );
		// a/b layout changed (RIE)
		// sign.loadLayout();		
		}
	progressPop ( 'price' );
	
	}
	
	function flushArtInfoText()
	{
		setInfoText ( 'Price', '-' );
		setInfoText ( 'ArtNr', '-' );		
	}
	
	function updatePrice()
	{
	requestPrice();
	}
		
	function requestPrice()
	{
	debug ( 'requestPrice() request price upate' );
	if ( sign.getSignFormat() == 0 )
		{
		flushArtInfoText();
		debug ( 'cannot retrieve price: format not set' );
		return;
		}
	if ( sign.getSignBaseForm() == 0 )
		{
		flushArtInfoText();
		debug ( 'cannot retrieve price: base form not set' );
		return; 
		}
	if ( sign.getSignMaterial() == 0 )
		{
		flushArtInfoText();
		debug ( 'cannot retrieve price: material not set' );
		return;
		}
	progressPushLoad ( 'price', 'Preisinformation' );
	debug ( 'requestPrice() query='+queryStringExtd() );	
	xhrGetAsync ( 'price'+queryStringExtd(), 'gotPrice' );						
	}
	
	function debug ( msg )
	{
	console.log ( 'sign() DEBUG_PRIV: '+msg );
	}
	
	function refreshPreviewImage()
	{
	debug ( 'refreshingPreviewImage()');
	debug ( 'URL='+preview_url );
	debug ( 'ID ='+preview_id  );
	}
	
	function gotGeneric ( response, ioArgs )
	{
	debug ( 'gotGeneric() * RECEIVED *' );
	debug ( 'items='+response.items.length );
	}
	
	function gotBaseColor ( response, ioArgs )
	{	
	debug ( 'gotBaseColor() * RECEIVED BASECOLOR *' );
	debug ( 'items='+response.items.length );
	basecol_loaded = response.items.length;	
	debug ( 'calling createSelectionByColor()' );
	setStatus ( response.items.length+' Grundfarben verf&uuml;gbar' );
	createSelectionByColor ( 'BaseColor', response.items );
	progressPop ( 'basecolor' );
	}
	
	function gotTextColor ( response, ioArgs )
	{	
	debug ( 'gotTextColor() * RECEIVED TEXTCOLOR *' );
	debug ( 'items='+response.items.length );	
	debug ( 'calling createSelectionByColor()' );
	// setStatus ( response.items.length+' Grundfarben verf&uuml;gbar' );
	createSelectionByColor ( 'TextColor', response.items );
	progressPop ( 'textcolor' );
	}
	
	function gotBorderColor ( response, ioArgs )
	{	
	debug ( 'gotBorderForm() * RECEIVED BORDERCOLOR *' );
	debug ( 'items='+response.items.length );
	bordercol_loaded = response.items.length;
	debug ( 'calling createSelectionByColor()' );
	setStatus ( response.items.length+' Rahmenfarben verf&uuml;gbar' );
	createSelectionByColor ( 'BorderColor', response.items );
	progressPop ( 'bordercolor' );
	}
	
	function gotBaseForm ( response, ioArgs )
	{
	
	debug ( 'gotBaseForm() * RECEIVED BASEFORM *' );
	debug ( 'items='+response.items.length );
	if ( response.items.length < 1 )
		{
		alert ( '008 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		debug ( 'calling createSelectionByImage()' );
		createSelectionByImage ( 'Baseform', response.items );
		setStatus ( 'Es sind '+response.items.length+' Grundformen verf&uuml;gbar.' );
		}
	debug ( 'gotBaseForm() done.' );
	progressPop ( 'init' );
	progressPop ( 'baseform' );
	debug ( 'gotBaseForm() returned from progressPop()' ); 
	}
	
	function getFontCount()
	{
		return font_count;
	}

	
	function gotEditorStyle ( response, ioArgs )
	{
		// alert ( 'gotEditorStyle()' );
		var edit = dijit.byId('SigntextEditor');
		if ( edit == null )
		{
			alert ( 'Cannot access editor.' );
		}
		else
		{
			if ( response.items.length >= 1 )
			{
			// alert ( 'Apply style '+response.items[0].style );
			// '/projects/signdesigner/css/editor_blue.css'
				// alert (  'stylesheets:'+edit.editingAreaStyleSheets.length );
				/*
			for each (var item in edit.editingAreaStyleSheets )
			{
				// alert (  'remove '+item );
				edit.removeStyleSheet ( item );
			}
			*/

			//RR
			// edit.editingAreaStyleSheets = new Array();

			// alert ( 'edit.styleSheets.length='+edit.styleSheets+' ('+edit.styleSheets.length+')' );
			// http://api.dojotoolkit.org/jsdoc/dijit/1.2/dijit._editor.RichText
			// http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/advanced-editing-and-display/editor-rich-text
			if ( edit.styleSheets.length > 0 ) 
			{
				// edit.styleSheets='';
				// edit.removeStyleSheet(0);
				edit.removeStyleSheet();
				edit.removeStyleSheet(0);
				edit.removeStyleSheet(edit.styleSheets);
				if ( dojo.isIE )
				{
				edit.removeStyleSheet(edit.styleSheets);
				}
				else
				{
				edit.removeStyleSheet(edit.styleSheets);
				// edit.removeStyleSheet(0);
				}
			}
			// alert ( 'Stylesheets removed!' );
			// alert ( 'addStyleSheet...' );
			// edit.styleSheets = response.items[0].style;
			var newStylesheet = response.items[0].style; 
			if ( dojo.isIE )
			{
			try
			{
			edit.addStyleSheet (newStylesheet); 
			}
			catch ( err )
			{
				alert ( 'Error while updating stylesheet: '+err.description );
			}
			}
			else
			{
			edit.addStyleSheet ( response.items[0].style );
			}
			// alert ( 'addStyleSheet done!' );
			// alert ( 'Stylesheet added: '+response.items[0].style );
			// alert ( 'editorStyleSheet: '+response.items[0].style );
			}
			else
			{
			alert ( 'No editor stylesheet found' );
			}
		}
	progressPop ( 'editor' );
	}
	
	function gotFonts( response, ioArgs )
	{
	debug ( 'gotFonts() * RECEIVED FONTS *' );
	debug ( 'items='+response.items.length );
	// alert ( 'font.items='+response.items.length );
	font_count = response.items.length;
	if ( response.items.length < 1 )
		{
		// alert ( '009 - General server failure. Unable to retrieve data. Please contact the webmaster.' );
		}
		else
		{
		debug ( 'calling createSelectionByImage()' );
		createSelectionByImage ( 'Font', response.items );
		setStatus ( 'Es sind '+response.items.length+' Schriftarten verf&uuml;gbar.' );
		}
	progressPop ( 'font' );
	}	  
	
	
	
	//function TabContainerNext()
	//{
	//debug ( 'TabContainerNext() id='+getTabContainerId() );	
	//dijit.byId(getTabContainerId()).forward(); 
	//}
	
	function getTabContainerId()
	{
	return id_tab_cont;
	}
	
	function paintBasket ( items )
	{
	var basket_tableContainer = document.createElement ( 'table' );
	var basket_table = document.createElement ( 'tbody' );
	basket_tableContainer.appendChild ( basket_table );
	// basket_table.setAttribute ( 'class', 'basketTable' );
	
	if ( dojo.isIE )
	{
		basket_tableContainer.style.cssText = "width: 100%; border-collapse: collapse;";
	}
	else
	{
		basket_tableContainer.setAttribute ( 'style', 'width: 100%; border-collapse: collapse;' );
	}
	
	
	basket_table.className = 'basketTable';
	var basket_info  = document.createElement ( 'div');
	var basket_total  = document.createElement ( 'div');
	var sign_count   = 0;
	basket_table.id = 'BasketTable';
	dojo.byId ( 'BasketContainer' ).innerHTML = '';
	sign_count = 0;
	dojo.byId ( 'BasketContainer' ).appendChild ( basket_tableContainer );
	sum = 0;
		for ( i = 0; i < items.length; i++ )
		{
		var item = items[i];
		sum += parseFloat(item.price)*parseInt(item['qty']);
		if ( i % 2 == 0 )
		{
			line_class = 'basketRowHi';
		}
		else
		{
			line_class = 'basketRowLo';
		}
		paintBasketItem ( i+1, 'BasketTable', line_class, item );
		sign_count += parseInt(item['qty']);
		}
	var totalRow = document.createElement ( 'tr');
	var total1st = document.createElement ( 'td');
	var total = document.createElement ( 'td');
	var totalSum = document.createElement ( 'td');
	basket_info.innerHTML = items.length+' Positionen, '+sign_count+' Schilder.';
	basket_total.innerHTML = 'zzgl. MWst. und Fracht';
	// basket_info.setAttribute ( 'class', 'basketInfo');
	basket_info.className = 'basketInfo';
	totalRow.className = 'basketTotal';
	total1st.innerHTML = '&nbsp;';
	total.innerHTML = 'Gesamt';
	totalSum.innerHTML = sum.toFixed(2)+' &euro;';
	total_basket_sum = sum.toFixed(2);
	if ( dojo.isIE )
	{
		
		totalSum.style.cssText = "text-align: right";
	}
	else
	{
		
		totalSum.setAttribute ( 'style', 'text-align: right' );
	}
	
	totalRow.appendChild ( total1st );
	totalRow.appendChild ( total );
	totalRow.appendChild ( totalSum );
	dojo.byId ( 'BasketTable' ).appendChild ( totalRow );
	dojo.byId ( 'BasketContainer' ).appendChild ( basket_total );
	dojo.byId ( 'BasketContainer' ).appendChild ( basket_info );
	if ( sign_count > 0 )
	{
	setBasketTabText ( 'Warenkorb ('+items.length+')', 'bold');
	}
	else
	{
		setBasketTabText ( 'Warenkorb', 'normal');
	}
	}
	
	function setBasketTabText( title, style )
	{
		console.log ( dijit.byId('Basket'));
		dijit.byId('Basket').title = title;
		dijit.byId('Basket').controlButton.containerNode.innerHTML = '<span style="font-weight:'+style+'">'+title+'</span>';
	}
	

	
	function paintBasketItem( pos, container_id, item_class, item )
	{
		// console.log ( item );
		var container = dojo.byId ( container_id );
		var basket_line = document.createElement ( 'tr' );
		var basket_qty  = document.createElement ( 'td' );
		var basket_qty_link  = document.createElement ( 'a' );
		var basket_item = document.createElement ( 'td' );
		var basket_preview = document.createElement ( 'a' );
		var basket_price = document.createElement ( 'td' );
		var basket_remove = document.createElement ( 'td' );
		
		var basket_id = document.createElement ( 'td');
		var basket_removeimg = document.createElement ( 'img');
		var basket_removelink = document.createElement ( 'a');
		
		var basket_plusimg = document.createElement ( 'img');
		var basket_pluslink = document.createElement ( 'a');
		
		var basket_minusimg = document.createElement ( 'img');
		var basket_minuslink = document.createElement ( 'a');
		
		basket_id.innerHTML = pos;
		if ( dojo.isIE )
		{
			basket_id.style.cssText = 'text-align: right';
			basket_remove.style.cssText = 'text-align: right';
		}
		else
		{
			basket_id.setAttribute ( 'style', 'text-align: right');
			basket_remove.setAttribute ( 'style', 'text-align: right');
		}
		
		// remove
		basket_removeimg.src = getSelectImgBaseURL()+'remove.gif';
		basket_removelink.innerHTML = '';
		if ( dojo.isIE )
		{
			basket_removeimg.style.cssText = 'border: 0; padding: 2px;';
			basket_removelink.href = '#';
			basket_removelink.onclick = new Function ( "sign.selectBasketRemoveItem('"+item['id']+"');" );
		}
		else
		{
			basket_removeimg.setAttribute ( 'style', 'border: 0; padding: 2px');
			basket_removelink.setAttribute ( 'href', '#');
			basket_removelink.setAttribute ( 'onClick', "sign.selectBasketRemoveItem('"+item['id']+"');");
		}
		basket_removelink.appendChild ( basket_removeimg );
		
		basket_plusimg.src = getSelectImgBaseURL()+'plus.gif';
		basket_pluslink.innerHTML = '';
	
		if ( dojo.isIE )
		{
			basket_plusimg.style.cssText = 'border: 0; padding: 2px';
			basket_pluslink.href = '#';
			basket_pluslink.onclick = new Function ("sign.basketIncItemQty('"+item['id']+"');");
		}
		else
		{
			basket_plusimg.setAttribute ( 'style', 'border: 0; padding: 2px');
			basket_pluslink.setAttribute ( 'href', '#');
			basket_pluslink.setAttribute ( 'onClick', "sign.basketIncItemQty('"+item['id']+"');");
		}
	
		basket_pluslink.appendChild ( basket_plusimg );
		
		basket_minusimg.src = getSelectImgBaseURL()+'minus.gif';
		basket_minuslink.innerHTML = '';
		
		if ( dojo.isIE )
		{
		basket_minusimg.style.cssText = 'border: 0; padding: 2px;';
		basket_minuslink.href = '#';
		basket_minuslink.onclick = new Function ("sign.basketDecItemQty('"+item['id']+"');");
		}
		else
		{
		basket_minusimg.setAttribute ( 'style', 'border: 0;  padding: 2px');
		basket_minuslink.setAttribute ( 'href', '#');
		basket_minuslink.setAttribute ( 'onClick', "sign.basketDecItemQty('"+item['id']+"');");
		}
		
		basket_minuslink.appendChild ( basket_minusimg );
		
		basket_remove.appendChild ( basket_pluslink );
		basket_remove.appendChild ( basket_minuslink );
		basket_remove.appendChild ( basket_removelink );
		
		if ( dojo.isIE )
		{
		basket_preview.href = '#';
		basket_preview.onclick = new Function ("sign.selectBasketZoomItem('"+item['id']+"');");
		basket_price.style.cssText = 'text-align: right	;';
		}
		else
		{
		basket_preview.setAttribute ( 'href', '#' );
		basket_preview.setAttribute ( 'onClick', "sign.selectBasketZoomItem('"+item['id']+"');" );
		basket_price.setAttribute ( 'style', 'text-align: right' );
		}
		
		basket_price.innerHTML = item['price']+' &euro;';
		
		if ( dojo.isIE )
		{
		basket_qty_link.style.cssText = 'display: block; padding-right: 5px; text-align: right; font-weight: bold; color: white;';
		basket_qty_link.href = '#';
		basket_qty_link.onclick = new Function ("sign.selectChangeItemQty('"+item['id']+"', "+parseInt(item['qty'])+");");
		}
		else
		{
		basket_qty_link.setAttribute ( 'style', 'display: block; padding-right: 5px; text-align: right; font-weight: bold; color: white;');
		basket_qty_link.setAttribute ( 'href', '#' );
		basket_qty_link.setAttribute ( 'onClick', "sign.selectChangeItemQty('"+item['id']+"', "+parseInt(item['qty'])+");" );
		}
		
		basket_qty_link.innerHTML = item['qty'];
		if ( dojo.isIE )
		{
		basket_qty.style.cssText = 'text-align: right; background: url('+getSelectImgBaseURL()+'qty.gif) no-repeat; width: 50px; background-position: right;';
		}
		else
		{
		basket_qty.setAttribute ( 'style', 'text-align: right; background: url('+getSelectImgBaseURL()+'qty.gif) no-repeat; background-position: right; width: 50px;');
		}
		basket_qty.appendChild ( basket_qty_link );
		
		basket_preview.innerHTML = 'Artikel '+item['artno']+' ('+item['artdesc']+')';
		basket_item.appendChild ( basket_preview );
		// basket_line.appendChild ( basket_id );
		basket_line.appendChild ( basket_qty );
		basket_line.appendChild ( basket_item );
		basket_line.appendChild ( basket_price );
		// basket_line.appendChild ( basket_remove );
		// basket_line.setAttribute ( 'class', item_class );
		basket_line.className = item_class;
		container.appendChild ( basket_line );
		
		var basket_line_desc = document.createElement ( 'tr' );
		var basket_blank     = document.createElement ( 'td' );
		var basket_desc      = document.createElement ( 'td' );
		var basket_unit      = document.createElement ( 'td' );
		basket_unit.innerHTML = 'pro Stck.';
		basket_blank.setAttribute ( 'colSpan', 1);
		basket_blank.innerHTML = '&nbsp;';
		// basket_line_desc.setAttribute ( 'class', item_class );
		basket_line_desc.className = item_class;
		basket_desc.setAttribute ( 'colSpan', 1);
		basket_desc.innerHTML = item['info'];
		basket_line_desc.appendChild ( basket_remove );
		basket_line_desc.appendChild ( basket_desc );
		basket_line_desc.appendChild ( basket_unit );
		// basket_line_desc.appendChild ( basket_remove );
		container.appendChild ( basket_line_desc );
	}
	
	function createOptionForComboBox ( id_combo, items )
	{	
	debug ( 'createOptionForComboBox() id_combo='+id_combo );
	// dojo.byId(id_combo).innerHTML = '';
	
	debug ( '--------------------> flush combo '+id_combo+'...' );
	// console.log ( dojo.byId ( id_combo ));
	// console.log ( "length="+dijit.byId ( id_combo ).store.root.length );
	// console.log ( dijit.byId ( id_combo ) );
	
	for ( i = dijit.byId ( id_combo ).store.root.length; i > 0; i-- )
		{		
		debug ( 'remove child #'+i );
		// dijit.byId( id_combo ).remove ( i );
		//dijit.byId(id_combo).store.root.removeChild ( combo_child );
	 	// dijit.byId( id_combo ).removeChild ( dijit.byId ( id_combo ).store.root[i]);
	 	}
	// console.log ( dijit.byId ( id_combo ));
	dijit.byId ( id_combo ).reset();
	// destroyDescendants
	// reset
	// uninitialize
	//var list = dojo.byId(id_combo);
	
	var list = dijit.byId(id_combo).store.root;
        while (list.lastChild) 
        {
        	debug ( 'removeChild()' );
            list.removeChild(list.lastChild);
        }
    debug ( 'flushed.' );	
    dijit.byId(id_combo).setDisplayedValue ( '' );
    dijit.byId(id_combo).setValue ( '');
    
	for ( i = 0; i < items.length; i++ )
		{
		var item = items[i];	
		debug ( 'createOptionForComboBox('+id_combo+') item='+item.name+', id='+item.id );
		// var option = document.createElement("option")
		//var option = dojo.doc.createElement('option');
		//option.value     = item.id;
		//option.innerHTML = item.name+ ' (id '+option.value+')';
		//option.setValue ( item.id );
		//option.setDisplayedValue ( item.name );				
		//dijit.byId(id_combo).store.root.appendChild(option);
		// dijit.byId(id_combo).domNode.appendChild(option);
		//var option = dojo.doc.createElement('option');
        //option.innerHTML = item.name;
        //option.value = item.id;
        // dojo.byId(id_combo).store.root.appendChild(option);
        //dijit.byId(id_combo).store.root.appendChild(option);
        
        var optn = document.createElement("option");
   		var attr = document.createAttribute("value");
   		var text = document.createTextNode( item.name ); // +' (format_id='+item.id+')' );
   		attr.nodeValue = item.id;
	    optn.setAttributeNode(attr);
   	    optn.appendChild(text);
   	    optn.value = item.id;
   		dijit.byId(id_combo).store.root.appendChild(optn);
		}
	}
	
	function gotFormat ( response, ioArgs )
	{
	debug ( 'gotFormat() * RECEIVED FORMAT *');
	debug ( 'items='+response.items.length );
	// debug ( 'calling createSelectionByTextImage()' );
	createOptionForComboBox ( 'FormatCombo', response.items );
	setStatus ( 'Es sind '+response.items.length+' Formate verf&uuml;gbar.' );
	elementShow ( 'FormatDoSelect' );
	elementHide ( 'FormatNoSelect' );
    elementShow ( 'FormatSelectArea' );
	}
	
	function signDump()
	{
	var dump = 'S'+getSignId()+'-B'+getBaseform()+'-F'+getFormat()+'-M'+getMaterial();
	return dump;
	}
	
	function gotLayout ( response, ioArgs )
	{
	debug ( 'gotLayouts() * RECEIVED LAYOUT *');
	debug ( 'items='+response.items.length );
	// alert ( 'layout.items='+response.items.length );
	debug ( 'calling createSelectionByTextImage()' );
	if ( response.items.length == 0 )
		{
		// console.log ( response );
		// console.log ( ioArgs );
		alert ( 'Error: Could not find any suitable layout for this sign: '+signDump()+'\n'+'URL: '+ioArgs.url);
		}
	for ( i = 0; i < response.items.length; i++ )
		{
		var item = response.items[i];
		if ( ( item.textcount == 0 ) && ( item.piccount == 0 ) )
			{
			alert ( 'Invalid layout '+item.name+' (id '+item.id+'). Layout has no properties!' );
			}
			else
			{
			debug ( 'layout name='+item.name+', id='+item.id+', pic='+item.piccount+', text='+item.textcount );
			}
		}
	i_layout = response;
	createSelectionByTextImage ( 'Layout', response.items );
	progressPop ( 'layout' );
	setStatus ( 'Es sind '+response.items.length+' Layouts verf&uuml;gbar.');
	elementShow ( 'LayoutDoSelect' );
	elementHide ( 'LayoutNoSelect' );
	elementShow ( 'LayoutSelectArea' );
	}
	
	function getLayoutIdxById ( id )
	{
	debug ( 'getLayoutIdxById() id='+id);
	if ( i_layout == null ) return -1;
	for ( i = 0; i < i_layout.items.length; i++ )
		{
		if ( i_layout.items[i].id == id )
			{
			return i;
			}
		}
	// alert ( 'Could not find id '+id);
	// alert ( i_layout );
	return -1;
	}
	
	function getPictoCountByLayoutId ( id )
	{
	debug ( 'getPictoCountByLayoutId() id='+id );
	idx = getLayoutIdxById ( id );
	if ( idx >= 0 )
		{
		debug ( 'found id at '+idx );			
		c = i_layout.items[idx].piccount;
		debug ( 'getPictoCountByLayoutId() number of pictograms in layout: '+c );
		return c;	
		}
	debug ( 'getPictoCountByLayoutId() no such item' );
	return 0;
	}
	
	function gotMaterial ( response, ioArgs )
	{
	debug ( 'gotMaterial() * RECEIVED MATERIAL *');
	debug ( 'items='+response.items.length );
	debug ( 'calling createSelectionByTextImage()' );
	// alert ( 'gotMaterial() items='+response.items.length);
	createSelectionByTextImage ( 'Materials', response.items );
	setStatus ( 'Es sind '+response.items.length+' Materialien verf&uuml;gbar.' );
	progressPop ( 'materials' );
	elementShow ( 'MaterialDoSelect' );
	elementHide ( 'MaterialNoSelect' );
	elementShow ( 'MaterialSelectArea' );
	}

	function setItemsInPig ( g, i )
	{
	pig_items[g] = i;
	}

	function clearItemsInPigList()
	{
	pig_items = new Array();
	}
	
	function gotPictogram ( response, ioArgs )
	{
	id = response.label+'Preview';
	debug ( 'gotPictogram() * RECEIVED PICTOGRAM '+response.label+' FOR id '+getSignId()+' *');
	debug ( 'gotPictogram() label='+response.label );
	debug ( 'gotPictogram() items='+response.items.length );	
	debug ( 'gotPictogram() calling createSelectionByTextImage() id='+id );	
	createSelectionByTextImage ( id, response.items );
	incLoadedPictoCount ( response.items.length );	
	setItemsInPig ( response.label, response.items.length );
	incLoadedPictoGroups ();
	progressPop ( 'pic_'+response.label );
	if ( getLoadedPictoGroups() == 6 )
		{
		var tabID = '';
		var pigID = '';
		for (i in pig_items)
		{
			if ( pig_items[i] > 0 )
			{
			pigID = i;
			//alert("Der Schlüssel ist "+i+" der Wert "+pig_items[i]);
			break;
			}
		}

		switch ( pigID )
		{
			case 'warn':      { tabID = 'PTabWarn'; break; }
			case 'vkz':       { tabID = 'PTabVKZ'; break; }
			case 'sonst':     { tabID = 'PTabSonst'; break; }
			case 'gebot':     { tabID = 'PTabGebot'; break; }
			case 'verbot':    { tabID = 'PTabVerbot'; break; }
			case 'verbotmit': { tabID = 'PTabVerbotmit'; break; }
		}
	
		if ( tabID != '' )
		{
                        selectTabPikto();
                        selectPictoTab ( 'PTabSonst' );
                        selectPictoTab ( 'PTabVKZ' );
			selectPictoTab ( tabID ) 
		}

		}
	}
	
	function xhrGetSync ( url, callbackFunction )
	{
	xhrGet ( url, callbackFunction, true );	
	}
	
	function xhrGetAsync ( url, callbackFunction )
	{
	// alert ( 'xhrGetAsync '+callbackFunction );
	xhrGet ( url, callbackFunction, false );	
	}
	
	function announceSent()
	{
	}
	
	function announce ( aid, atag, avalue )
	{
		if ( announceEnabled() == false ) return;
		callbackFunction = 'announceSent';
		args = {};
		args['id']  = aid;
		args['tag'] = atag;
		args['val'] = avalue;
		xhr_url = json_url+'announce';
		xhr = dojo.xhrPost({
	        url: xhr_url, 
	        handleAs: "json",
	        sync: false,
	        timeout: 0,
	        content: args,
	        preventCache: false,
	        load:  dojo.hitch(this, eval(callbackFunction)) });
	}
	
	function xhrPost( url, callbackFunction, content, sync_mode )
	{
	sync_mode = sync_mode || true;
	xhr_url = json_url+url;
	// alert ( 'xhrPost() url='+xhr_url+', content='+content);
	debug ( 'xhrPost()' );
	debug ( 'xhr_url='+xhr_url );
	debug ( 'callback='+callbackFunction+'()' );
	debug ( 'sync_mode='+sync_mode );		
	xhr = dojo.xhrPost({
        url: xhr_url, 
        handleAs: "json",
        sync: sync_mode,
        timeout: 0,
        content: content,
        preventCache: false,
        load:  dojo.hitch(this, eval(callbackFunction)),               
        error: function(response, ioArgs){
       	debug ( 'xhrPost() error while trying '+url+': '+response );
        return response;
        }
    });
    debug ( 'xhrPost() done' );
	}
	
	function initOthers()
	{
		elementHide ( 'MaterialDoSelect' );
		elementHide ( 'FormatDoSelect' );
		elementHide ( 'LayoutDoSelect' );
		elementShow ( 'MaterialNoSelect' );
		elementShow ( 'FormatNoSelect' );
		elementShow ( 'LayoutNoSelect' );
		elementHide ( 'FormatSelectArea')
		elementHide ( 'LayoutSelectArea' );
		elementHide ( 'MaterialSelectArea' );
	}
	
	function initFontAndTextArea()
	{
		elementHide ( 'FontContainer' );
		elementHide ( 'FontDoSelect' );
		elementHide ( 'TextDoSelect' );
		elementShow ( 'FontNoSelect' );
		elementShow ( 'TextNoSelect' );
		elementHide ( 'TextInputArea');
	}
	
	
	function xhrGet( url, callbackFunction, sync_mode )
	{
	sync_mode = sync_mode || true;
	xhr_url = json_url+url;
	debug ( 'xhrGet()' );
	debug ( 'xhr_url='+xhr_url );
	debug ( 'callback='+callbackFunction+'()' );
	debug ( 'sync_mode='+sync_mode );		
	xhr = dojo.xhrGet({
        url: xhr_url, 
        handleAs: "json",
        sync: sync_mode,
        timeout: 0,
        preventCache: true,
        load:  dojo.hitch(this, eval(callbackFunction)),               
        error: function(response, ioArgs){
       	debug ( 'xhrGet() error while trying '+url+': '+response );
       	// dojo.debugDeep ( response );
       	// dojo.debugShallow ( response );
       	alert ( 'Communication failure while '+url+': '+response.description )
	console.log ( response );
        return response;
        }
    });
    debug ( 'xhrGet() done' );
	}
	
	function setBaseform ( id )
	{
	baseform = id;
	updatePrice();
	sign.refreshPreview();
	}
	
	function setFormat ( id )
	{	
	debug ( 'setFormat() id='+id );
	format = id;
	// because of a/b layouts, let's do this later
	updatePrice();
	// included because of late-format-changes

	if ( id > 0 ) 
		{
		sign.loadLayout();
		}
	
	sign.refreshPreview();
	}
	
	function setBaseColor ( id )
	{	
	base_color = id;
	sign.refreshPreview();
	loadEditorStyle();
	}
	
	function getBaseColor()
	{
	return base_color;
	}
	
	function setBorderColor ( id )
	{	
	border_color = id;
	sign.refreshPreview();
	}
	
	function getBorderColor()
	{
	return border_color;
	}
	
	function setMaterial ( id )
	{
	material = id;
	updatePrice();
	}
	
	function getLayout()
	{
	return layout;
	}
	
	function getBaseform()
	{
	return baseform;
	}
	
	function getFormat()
	{
	return format;
	}
	
	function getMaterial()
	{
	return material;
	}

	function queryString()
	{
		var q = '';
		q = q + '/baseid/'+getBaseform();
		q = q + '/matid/'+getMaterial();
		q = q + '/formid/'+getFormat();
		q = q + '/signid/'+getSignId();
		// q = q + '/laynid/'+getLayout();
		debug ( 'queryString() query='+q );
		return q;
	}
	
	function setText ( new_text )
	{
	text = new_text;
	}
	
	function getText()
	{
	return text;
	}
	
	function elementHide ( element_id )
	{
	elementSetVisibility ( element_id, false );
	}

	function elementShow ( element_id )
	{
	elementSetVisibility ( element_id, true );
	}

	function elementSetVisibility ( element_id, display_item )
	{
	debug ( 'elementSetVisibility() element='+element_id+', value='+display_item)
	var e = dojo.byId ( element_id );
	if ( e )
		{
		if ( display_item )
		{
			e.style.visibility = 'visible';
			e.style.display    = 'block';
		}
		else
		{
			e.style.visibility = 'hidden';
			e.style.display    = 'none';	
		}
		}
  		else
  		{
		debug ( 'elementSetVisibility() no such element: '+element_id );
  		debug ( dojo.byId ( element_id ) );
  		}
	}
	
	function progressPushLoad ( id, text )
	{
	progressPush ( id, 'Lade '+text );
	}
	
	function progressPushRequest ( id, text )
	{
	progressPush ( id, 'Anfrage '+text );
	}
	
	function progressPushRefresh ( id, text )
	{
	progressPush ( id, 'Aktualisiere '+text );
	}
	
	function progressPushTransfer ( id, text )
	{
	progressPush ( id, 'Sende '+text );
	}
	
	function progressPushSelect ( id, text )
	{
	progressPush ( id, 'Auswahl: '+text );
	}
	
	function showProgressWindow()
	{
		 
	    if ( timeOutEnabled() ) 
	    	{
	    	window.setTimeout( function() { noop(); }, 500 );
	    	}
	    else
	    	{
	    	elementSetVisibility ( 'progressContainer', true );
	    	}
	    elementSetVisibility ( 'progressContainer', true );
	}
	
	function timeOutEnabled()
	{
		return false;
	}
	
	function delayedRequestEnabled()
	{
		return false;
		return dojo.isIE;
	}
	
	function hideProgressWindow()
	{
		if ( timeOutEnabled() ) 
    	{
		window.setTimeout( function() { elementSetVisibility ( 'progressContainer', false ); }, 500 );
    	}
		else
		{
			elementSetVisibility ( 'progressContainer', false );
		}
		// elementSetVisibility ( 'progressContainer', false );
	}
	
	function noop() {}
	
	function progressPush ( id, text )
	{
	var progress_container = dojo.byId ( 'progressContainer' );
	var progress_info      = dojo.byId ( 'progressInfo' );
	var progress_text      = document.createElement("div");
	// text += ' ('+id+')';
	if ( progress_container != null )
		{
		setStatus ( 'Besch&auml;ftigt: '+text );
		showProgressWindow();
		progress_text.innerHTML = text;
		progress_text.id        = 'pi_'+id;	
		progress_info.appendChild ( progress_text );
		}
	}
	
	function progressPop ( id )
	{
	debug ( 'progressPop() id='+id );	
	var progress_info      = dojo.byId ( 'progressInfo' );
	var progress_text      = dojo.byId ( 'pi_'+id );
	if ( ( progress_info != null ) && ( progress_text != null ) )
		{
		progress_info.removeChild ( progress_text );
		
		var childCount = progress_info.getElementsByTagName('div').length;
		if ( childCount <= 0 )
			{
			// var progress_container  = dojo.byId ( 'progressContainer' );
			// progress_container.style.display = 'none';#
			hideProgressWindow();
			}
		}	
	}
	
	function getTextEncoded()
	{
	var base64_text = Base64.encode( getText() );
	debug ( 'getTextEncoded() re-decoded: '+Base64.decode ( base64_text ) );	
	return base64_text;
	}
	
	function getOrderCount()
	{
		var widget = dijit.byId('count');
		var value = widget.getValue();
		return widget.getValue();
		// sign.selectFormat ( widget.getValue(), widget.getDisplayedValue());		
	}

	function queryStringExtd()
	{
		var q = queryString();
		q = q + '/bocol/'+getBorderColor();
		q = q + '/bacol/'+getBaseColor();
		q = q + '/layid/'+getLayout();
		for ( i = 1; i <= 2; i++ )
			{
			if ( picto[i] != null ) q = q + '/p'+i+'/'+picto[i];
			}		
		if ( getSignHasText() ) q = q + '/text/'+getTextEncoded();			
		q = q + '/font/'+getFont();
		q = q + '/count/'+getOrderCount();
		q = q + '/artno/'+getMatnr();
		// q = q + '/signid/'+getSignid();
		debug ( 'queryStringExt() query='+q );
		return q;
	}
	
	function selectReset()
	{
	if ( resetOnSelectEnabled() ) 
		{
		if ( ( getSignId() != 0 ) || ( getMaterial() != 0 ) )
			{
			// signAlert ( 'Hinweis', 'Schild wird auf \'default\' gesetzt.');
			}
		sign.reset();
		}
	}


	return {
	   /* --------------------------------------------------
	      public attributes
	      -------------------------------------------------- */
	sign_id: "007",
	   /* --------------------------------------------------
	      public method
	      -------------------------------------------------- */
	selectBaseform: function ( id, text )
		{
		// alert('selectBaseform() id='+id+', text='+text);
		debug ( 'selectBaseform() id='+id+', text='+text );
		announce ( 'BFRM', text, id );
		progressPushSelect ( 'sel_baseform', 'Grundform' );		
		selectReset();
		setInfoText ( 'Baseform', text );
		setText ( '' );
		dijit.byId('SigntextEditor').setValue('');
		setBaseform ( id );
		if ( id > 0 )
			{		
			sign.goTabMaterial();
			sign.loadMaterial ();
			}
		progressPop ( 'sel_baseform' );
		},
	selectBaseColor: function ( id, text, colorcode )
		{
		announce ( 'BCOL', text, id );
		debug ( 'selectBaseColor() id='+id+', text='+text );
		setInfoText ( 'BaseColor', text );
		
		if ( ( getFormat() > 0 ) && ( bordercol_loaded == 0 ) )
		{
			selectTabLayout();
		}
		
		if ( ( getFormat() > 0 ) && ( getBorderColor() > 0 ) )
		{
			selectTabLayout();
		}
		
		
		setBaseColor ( id );
		
		//sign.loadMaterial ();
		//TabContainerNext();
		},
	selectTextColor: function ( id, text, colorcode )
		{
		announce ( 'TCOL', text, id );
		debug ( 'selectTextColor() id='+id+', text='+text );
		// alert ( "COLOR="+text );
		sign.setTextColor ( colorcode );
		// setInfoText ( 'BaseColor', text );
		// setBaseColor ( id );
		//sign.loadMaterial ();
		//TabContainerNext();
		},
	selectLayout: function ( id, text )
		{
		announce ( 'LAY', text, id );
		var prev_layout = getLayout();
		debug ( 'selectLayout() id='+id+', text='+text+', previous='+prev_layout );
		// setInfoText ( 'Layout', text+ ' (id '+id+')' );
		setInfoText ( 'Layout', text );
		
		setLayout ( id );
		idx = getLayoutIdxById ( getLayout() );
		
		debug ( 'selectLayout() layout_idx='+idx );
		if ( idx >= 0 )
		{
			// console.log ( i_layout.items[idx] );
		}
		else
		{
			if ( id > 0 ) 
				{
				alert ( 'No such layout! id='+id+', idx='+idx );
				}
		}
		
		if ( idx >= 0 )
			{
			setInfoText ( 'PictoCount', i_layout.items[idx].piccount+' Pikto\'s' );
			pictos_available = ( i_layout.items[idx].piccount > 0 );
			if ( i_layout.items[idx].piccount == 0 )
			{
			}
			
			else
			{
			
			}
			if ( ( idx < 0 ) || ( i_layout.items[idx].textcount == 0 ))
					{
					setSignHasText ( false );
					setInfoText ( 'HasText', 'ohne Text' );
					elementHide ( 'FontContainer' );
					elementHide ( 'FontDoSelect' );
					elementHide ( 'TextDoSelect' );
					elementShow ( 'FontNoSelect' );
					elementShow ( 'TextNoSelect' );
					elementHide ( 'TextInputArea');
					}
					else
					{
					elementShow ( 'FontContainer' );
					elementShow ( 'TextInputArea');
					elementHide ( 'FontNoSelect' );
					elementHide ( 'TextNoSelect' );
					elementShow ( 'FontDoSelect' );
					elementShow ( 'TextDoSelect' );	
					setSignHasText ( true );
					setInfoText ( 'HasText', 'mit Text' );
					
					
				
					}
			}		
			else
			{
			pictos_available = false;
			setInfoText ( 'PictoCount', '-' );
			setInfoText ( 'HasText', '-' );
			}
		if ( id > 0 ) 
			{
			if ( !pictogramsLoaded() ) this.loadPictograms();
			}
		loadEditorStyle();
		// updatePrice();
		// alert ( 'calling loadFonts() and signid is '+getSignId()+', layout id is '+id );
		this.loadFonts();
		this.loadTextColor();
		if ( prev_layout <= 0 ) 
			{
			debug ('selectLayout() switching to next tab...');
			// sign.tabContainerNext();
			debug ( 'pictos available? '+pictos_available );
			if ( pictos_available == 0 ) 
			{
			debug ( 'AUTOSELECT font tab, because there are no pictograms available.');
			if ( getFontCount() > 1 )
				{
				// alert ( 'fonts='+getFontCount() );
				selectTabFont();
				}
			else
				{
				// alert ( 'selectTabText()');
				selectTabText();
				}
			// ANDI
			}
			else
			{
			selectTabPikto();
			}
			
			}
		else
		{
			debug ('selectLayout() AutoSelect next tab disabled, because previous layout was '+prev_layout+' ( new is '+getLayout()+')' );
		}
		sign.refreshPreview();
		
		
		},		
	selectBorderColor: function ( id, text, colorcode )
		{
		announce ( 'BDCOL', text, id );
		debug ( 'selectBorderColor() id='+id+', text='+text );
		setInfoText ( 'BorderColor', text );
			
		if ( ( getFormat() > 0 ) && ( getBaseColor() > 0 ) )
		{
			selectTabLayout();
		}
		
		setBorderColor ( id );
		//sign.loadMaterial ();
		//TabContainerNext();
		},		
	selectFormat: function ( id, format_text )
		{
		announce ( 'FORM', text, id );
		debug ( 'selectFormat() id='+id+', text='+format_text );
		progressPushSelect ( 'sel_format', 'Format' );
		
		if ( id > 0 )
		{
		if ( ( bordercol_loaded == 0 ) && ( basecol_loaded == 0 )  )
		{
			selectTabLayout();
		}
		
		if ( ( getBorderColor() > 0 ) && ( getBaseColor() > 0 ) )
		{
			selectTabLayout();
		}

		if ( ( getBaseColor() > 0 ) && ( bordercol_loaded == 0 ) )
		{
			selectTabLayout();
		}
		}

		
		setInfoText ( 'Format', format_text );
		setFormat ( id );	
		progressPop ( 'sel_format' );
		setStatus ( 'Format gew&auml;hlt: '+format_text );
		
		},
	selectMaterials: function ( id, text )
		{		
		debug ( 'selectMaterials() id='+id+', text='+text );
		progressPushSelect ( 'sel_material', 'Material' );
		setInfoText ( 'Material', text );
		setMaterial ( id );
		if ( id > 0 )
			{
			
			setBorderColor ( 0 );
			setBaseColor ( 0 );
			setInfoText ( 'BaseColor', '' );
			setInfoText ( 'BorderColor', '' );
			sign.loadBaseColor ();
			sign.loadBorderColor ();

			announce ( 'MAT', text, id );
			sign.loadFormat();
			sign.goTabFormat();
			}
		progressPop ( 'sel_material' );
		},
	setTabContainerId: function ( id )
		{
		id_tab_cont = id;
		},		
	addToBasket: function()
		{
		this.debug ( 'addToBasket() submit sign to server-side basket' );
		},
	resetTabs: function()
	{
		elementHide ( 'ScalePriceArea' );
	},
	reset: function()
		{
		setSignHasText ( false );
		elementHide ( 'ScalePriceArea' );
		this.debug ( 'reset() reset current sign' );
		setResetOnSelect ( false);
		setSignId ( 0 );
		this.debug ( 'reset Baseform...' );
		this.selectBaseform    ( 0, '-' );
		this.debug ( 'reset Material...' );
		this.selectMaterials    ( 0, '-' );
		this.debug ( 'reset BorderColor...' );
		this.selectBorderColor ( 0, '-' );
		this.debug ( 'reset BaseColor...' );
		this.selectBaseColor   ( 0, '-' );
		this.debug ( 'reset Layout...' );
		this.selectLayout      ( 0, '-' );
		this.selectFormat      ( 0, '-');
		setFont(0);
		this.selectFont      ( 0, '-');
		setText ('');
		setLoadedPictoCount ( 0 );
		picto = new Array();
		updatePrice();		
		setResetOnSelect ( true );
		sign.refreshPreview();
		signChanged();
		selectTabGrundform();
		initFontAndTextArea();
		initOthers();
		picto_loaded = 0;
		basecol_loaded = 0;
		bordercol_loaded = 0;
		// alert ( 'reset: basecolor='+getBaseColor()+', border='+getBorderColor()+', layout='+getLayout()+', font='+getFont()+', sign='+getSignId()+', hastext='+getSignHasText());
		//console.log ( dijit.byId(getTabContainerId()));
		},
	setSelectImgBaseURL: function(base_url)
		{
		this.debug ( 'setSelectImgBaseURL() url='+base_url);
		selectimg_url = base_url; 
		},
	loadFonts: function()
		{
		debug ( 'loadFonts()' );
		if ( getSignHasText() )
		{
		// alert ( 'loadFonts() loading...');
		progressPushLoad ( 'font', 'Schriftarten' );
		// alert ( 'fonts'+queryString() );
		xhrGetDelayed ( 'fonts'+queryString(), 'gotFonts' );
		}
		else
		{
			// alert ( 'NO FONTS');
			this.debug ( 'loadFonts() sign has no text - no need to load fonts');
		}
		},
	loadTextColor: function()
		{
		debug ( 'loadTextColor()' );
		if ( getSignHasText() )
		{
		progressPushLoad ( 'textcolor', 'Textfarben' );
		xhrGetDelayed ( 'textcolor'+queryString(), 'gotTextColor' );
		}
		else
		{
			this.debug ( 'loadTextColor() sign has no text - no need to load textcolor');
		}
		},
	loadAll: function()
		{
		this.debug ( 'loadAll()' );
		this.loadBaseForm();
		loadBasket();
		loadCustomerData();
		initFontAndTextArea();
		initOthers();
		signChanged();
		// dijit.byId("...").selectTab(  dojo.widget.byId("...") );
		// console.log ( dijit.byId(getTabContainerId()) );
		selectTabGrundform();
		//this.loadMaterial();
		//this.loadFormat();
		//this.loadBaseColor();
		//this.loadBorderColor();
		//this.loadLayout();		
		},
	loadPictograms: function()
		{
		clearItemsInPigList()
		debug ( 'loadPictograms()' );
		setLoadedPictoCount(0);
		// progressPush ( 'Verbotsschilder' );
		// progressPush ( 'Gebotsschilder' );
		setLoadedPictoGroups ( 0 );
		progressPushLoad ( 'pic_verbot', 'Verbotszeichen (Typ 1)' );
		progressPushLoad ( 'pic_verbotmit', 'Verbotszeichen (Typ 2)' );
		progressPushLoad ( 'pic_gebot', 'Gebotszeichen' );
		progressPushLoad ( 'pic_vkz', 'Verkehrskennzeichen' );
		progressPushLoad ( 'pic_warn', 'Warnzeichen' );
		progressPushLoad ( 'pic_sonst', 'Sonstige' );
		xhrGetAsync ( 'pictograms'+queryString()+'/type/verbot', 'gotPictogram' );
		xhrGetAsync ( 'pictograms'+queryString()+'/type/verbotmit', 'gotPictogram' );
		xhrGetAsync ( 'pictograms'+queryString()+'/type/vkz', 'gotPictogram' );
		xhrGetAsync ( 'pictograms'+queryString()+'/type/gebot',  'gotPictogram' );
		xhrGetAsync ( 'pictograms'+queryString()+'/type/warn',   'gotPictogram' );
		xhrGetAsync ( 'pictograms'+queryString()+'/type/sonst',   'gotPictogram' );
		},
	loadLayout: function()
		{
		debug ( 'loadLayout()' );
		progressPushLoad ( 'layout', 'Layout' );
		xhrGetDelayed ( 'layouts'+queryString(), 'gotLayout' );				
		},
	loadBaseColor: function()
		{
		debug ( 'loadBaseColor()' );
		progressPushLoad ( 'basecolor', 'Grundfarbe' );
		xhrGetDelayed ( 'basecolor'+queryString(), 'gotBaseColor' );				
		},
	loadBorderColor: function()
		{
		progressPushLoad ( 'bordercolor', 'Rahmenfarbe' );
		debug ( 'loadBorderColor()' );
		xhrGetDelayed ( 'bordercolor'+queryString(), 'gotBorderColor' );				
		},
	loadFormat: function()
		{
		debug ( 'loadFormat()' );
		progressPushLoad ( 'format', 'Format' );
		xhrGetDelayed ( 'format'+queryString(), 'gotFormat' );
		progressPop ( 'format' );				
		},
	loadBaseForm: function()
		{
		// alert ( 'loadBaseForm()');
		debug ( 'loadBaseForm()' );
		progressPushLoad ( 'baseform', 'Grundformen' );
		xhrGetDelayed ( 'baseform', 'gotBaseForm' );		
		},
	loadMaterial: function()
		{		
		debug ( 'loadMaterial() baseform='+getBaseform() );
		progressPushLoad ( 'materials', 'Materialien' ); 
		xhrGetDelayed ( 'materials'+queryString(), 'gotMaterial' );		
		},
	debugOn:      function() { debugging = true; this.debug ('debugging enabled'); },
	debugOff:     function() { debugging = false; },
	debugEnabled: function() { return debugging; },
	getMatNr: function()
		{
		return mat_nr;
		},
	
	getPrice: function ()
		{	
		debug ( 'getPrice()' );
		if ( price_pu == 0 )
			{
			requestPrice();			
			}
		return price_pu;
		},
	setInfoIdPrefix: function ( id_prefix )
		{
		this.debug ( 'setInfoIdPrefix()' );
		id_info_pre = id_prefix;
		},
	setPreviewBaseURL: function ( preview_base )
		{
		preview_url = preview_base;
		},
	setPreviewImageID: function ( id )
		{
		preview_id = id;
		},
	setJsonBaseURL: function ( json_base )
		{
		this.debug ( 'Setting JSON base url to '+json_base );
		json_url = json_base;
		},
	getJsonBaseURL: function()
		{
		return json_url;
		},
	dump:  function ()
		{		
		},
	xdebug: function ()
		{
		},
	setLayout: function ( newLayout )
		{
		this.debug ( 'setLayout() public: layout='+newLayout );
		layout = newLayout;
		},
	jsonTest: function()
		{
		this.debug ( 'jsonTest()' );
		this.debug ( 'jsonBaseURL: '+this.getJsonBaseURL() );
		refreshPreviewImage();
		},
	getSignLayout: function ()
		{		
		return layout;		
		},	
	getSignFormat: function()
		{
		return format;
		},	
	getSignBaseForm: function()
		{
		return baseform;
		},
	getSignMaterial: function()
		{
		return material;
		},
	tabContainerPrev: function()
		{
		// sign.tabContainerNext()
		debug ( 'TabContainerPrev() id='+getTabContainerId() );	
		if ( resetOnSelectEnabled() == true ) 
				{
				dijit.byId(getTabContainerId()).back();
				}		
		},
	tabContainerNextButton: function()
	{
		announce ( 'NEXT', 0, 0 );
		dijit.byId(getTabContainerId()).forward();
	},
	tabContainerPrevButton: function()
	{
		announce ( 'PREV', 0, 0 );
		dijit.byId(getTabContainerId()).back();
	},
	tabContainerNext: function()
		{
		debug ( 'TabContainerNext() id='+getTabContainerId() );	
		if ( resetOnSelectEnabled() == true ) 
				{
				// next tab disabled (ruehle)
				if ( autoTabSwitch() )
					{
					dijit.byId(getTabContainerId()).forward();
					}
				}
		},
	setSignText: function ( sign_text )
		{
		this.debug ( 'setSignText() '+sign_text );
		text = sign_text;
		},
	setSignFormat: function ( sign_format )
		{
		this.debug ( 'setSignFormat() '+sign_format );
		format = sign_format;
		},
	setSignBaseForm: function ( sign_baseform )
		{
		this.debug ( 'setSignBaseForm() '+sign_baseform );
		baseform = sign_baseform;
		},
	setSignMaterial: function ( sign_material )
		{
		this.debug ( 'setSignMaterial() '+sign_material );
		material = sign_material;
		},
	setSignBaseColor: function ( sign_basecolor )
		{
		this.debug ( 'setSignBaseColor() '+sign_basecolor );
		base_color = sign_basecolor;
		},
	setSignBorderColor: function ( sign_bordercolor )
		{
		this.debug ( 'setSignBorderColor() '+sign_bordercolor );
		border_color = sign_bordercolor;
		},
	setSignLayout: function ( sign_layout )
		{
		this.debug ( 'setSignLayout() '+sign_layout );
		layout = sign_layout;
		},
	setFontColor: function ( sign_fontcolor )
		{
		this.debug ( 'setFontColor() '+sign_fontcolor );
		font_color = sign_fontcolor;
		},
	signToBasket: function()
		{		
		this.debug ( 'signToBasket()' );
		submitSignAndValidate();
		},
	signDiscard: function()
		{
		this.debug ( 'signDiscard()' );
		reset();		
		},
	setEditorHandler: function()
		{
		this.debug ( 'setEditorHandler()' );
		// http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/advanced-editing-and-display/editor-rich-text
		dojo.connect(dijit.byId('SigntextEditor'), 'onNormalizedDisplayChanged', function(){sign.eventTextChanged()} );
		},
	eventTabSelected: function ( e )
	{
		// console.log ( e.id );
			// alert ( e.id );
		announce ( 'TAB', e.id, 0 );
	},
	setTabHandler: function()
		{
		this.debug ( 'setTabHandler()' );
		// http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/advanced-editing-and-display/editor-rich-text
		dojo.connect(dijit.byId('Grundform'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Material'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Format'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Layout'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PiktoTabs'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Schriftart'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Text'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Bestellen'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Info'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Basket'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('Account'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('About'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PTabVerbot'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PTabVerbotmit'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PTabGebot'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PTabWarn'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PTabVKZ'), 'onShow', function(){sign.eventTabSelected(this)} );
		dojo.connect(dijit.byId('PTabSonst'), 'onShow', function(){sign.eventTabSelected(this)} );
		},	
	setPictoSelectHandler: function()
		{
		},
	eventTextChanged: function()
		{
		this.debug ( 'eventTextChanged()');
		new_text = dijit.byId('SigntextEditor').getValue(false);
		this.debug ( 'eventTextChanged() text='+new_text );		
		this.selectText ( new_text );
		},
	selectBasketAction: function()
   	    {
			this.debug ( 'selectPictoPos()' );
			var id_pictopos = 'BasketDoneDialog';
			// dojo.connect(dojo.byId('PictoPosBtn_left'),  'onclick', function(){sign.selectPictogramPos(id,'',1)} ); 
			// dojo.connect(dojo.byId('PictoPosBtn_right'), 'onclick', function(){sign.selectPictogramPos(id,'',2)} );		
			msgbox = dijit.byId ( id_pictopos );
			dijit.byId( id_pictopos ).show();	
	    },
	selectPictoPos: function(id)
		{
		this.debug ( 'selectPictoPos()' );
		var id_pictopos = 'PictoPosDialog';
		dijit.byId('PictoPosBtn_right').onclick = "alert('right');";
		dijit.byId('PictoPosBtn_left').onclick = "alert('left');"; 
		dojo.connect(dojo.byId('PictoPosBtn_left'),  'onclick', function(){sign.selectPictogramPos(id,'',1)} ); 
		dojo.connect(dojo.byId('PictoPosBtn_right'), 'onclick', function(){sign.selectPictogramPos(id,'',2)} );		
	
		msgbox = dijit.byId ( id_pictopos );
		// console.log ( dijit.byId ( id_pictopos ) );
		// console.log ( dijit.byId('PictoPosBtn_left	'));
		// console.log ( dijit.byId('PictoPosBtn_right'));		
		dijit.byId( id_pictopos ).show();
		},
	selectFont: function ( id, font_text )
		{
		setFont ( id );		
		this.refreshPreview();
		if ( id > 0 )
		{
			// alert ( 'calling goTabText() because id > 0 ('+id+', '+font_text+') mat='+getMaterial()+', form='+getFormat()+', lay='+getLayout());
			sign.goTabText();
		}
		setStatus ( 'Schriftart gew&auml;hlt: '+font_text );
		setInfoText ( 'Font', font_text );
		announce ( 'FONT', font_text, id );
		},
	selectText: function ( text )
		{
		debug ( 'selectText() text='+text );
		if ( getSignHasText() )
			{
			setText ( text );
			this.refreshPreview();
			}
		else
			{
			this.debug ( 'selectText() sign has no text - no need to update it!');
			}
		},
	selectPictogramPos: function ( id, text, pos )
		{
			// alert ( 'Setting id'+id+' to pos #'+pos );
			announce ( 'PPOS'+pos, text, id );
			setPicto ( id, pos );
			this.refreshPreview();
			setStatus ( 'Piktogramm positioniert.' );
			if ( numOfPictosDefined() >= 2 )
			{
				dijit.byId('PictoPosDialog').hide();
				selectTabFont();
			}
		},
	selectPictogram: function( id, text )
		{		
		picto_count = getPictoCountByLayoutId ( getLayout() );
		this.debug ( 'selectPictogram() id='+id+', text='+text+', picto_count='+picto_count+', layout_id='+getLayout() );
		if ( picto_count > 1 )
			{ 			
			this.selectPictoPos(id);
			if ( numOfPictosDefined() >= 2 )
			{
				// selectTabFont();
			}
			}
			else
			{
			announce ( 'PPOS1', text, 1 );
			setPicto ( id, 1 );
			this.refreshPreview();
			setStatus ( 'Piktogramm gew&auml;hlt: '+text );
			if ( getSignHasText() == false )
			{
				selectTabOrder();
			}
			else
			{
				selectTabFont();
			}
			}
		},
	selectgebotPreview: function( id, text )
		{
		this.selectPictogram ( id, text ); 
		},
	selectsonstPreview: function( id, text )
		{
		this.selectPictogram ( id, text ); 
		},
	selectwarnPreview: function( id, text )
		{
		this.selectPictogram ( id, text ); 
		},
	selectverbotPreview: function( id, text )
		{
		this.selectPictogram ( id, text ); 
		},
	selectverbotmitPreview: function( id, text )
		{
		this.selectPictogram ( id, text ); 
		},
	selectvkzPreview: function( id, text )
		{
		this.selectPictogram ( id, text ); 
		},
	getPreviewURL: function()
		{
		return preview_url;
		},
	orderPlacedDialog: function()
	{
		dijit.byId('OrderReceivedDialog').show();
	},
	selectCreateCustomer: function ( name, contact, phone, fax, street, city, zip, newsletter )
	{
		this.debug ( 'createCustomer()' );
		// console.log b2b( args );
		// alert ( args );
		
		args = {};
		args['newCustName']  = name;
		args['newCustContact']  = contact;
		args['newCustPhone']  = phone;
		args['newCustFax']  = fax;
		args['newCustStreet']  = street;
		args['newCustCity']  = city;
		args['newCustZIP']  = zip;
		args['newCustNewsletter']  = newsletter;
		
		progressPushTransfer ( 'createnewcustomer', 'Kundenanlage');
		xhrPost ( 'createnewcustomer', 'gotCreateNewCustomerResponse', args );
	},
	selectShipping: function()
	{
		dijit.byId('ShippingDialog').show();
		announce ( 'SHIP', '', '' );
	},
	showAuthDialog: function()
	{
		dijit.byId('AuthDialog').show();
		announce ( 'AUTH', '', '' );
	},
	selectNewCustomer: function ( mail )
	{
		this.debug ( 'createCustomer()' );
		// console.log ( args );
		args = {};
		args['newUser']  = mail;
		// alert ( mail );
		progressPushTransfer ( 'createcustomer', 'Kundenanlage');
		xhrPost ( 'createcustomer', 'gotCreateCustomerResponse', args );
	},
	placeOrder: function( ref, sto, sdept, sstreet, szip, scity, sextra )
	{
		this.debug ( 'customerLogin()' );
		// console.log ( args );
		args = {};
		args['shipRef']  = ref;
		args['shipTo']  = sto;
		args['shipStreet']  = sstreet;
		args['shipDept']  = sdept;
		args['shipZIP']  = szip;
		args['shipCity']  = scity;
		args['shipExtra']  = sextra;
		
		progressPushTransfer ( 'order', 'Auftragsdaten');
		xhrPost ( 'order', 'gotOrderResponse', args );
	},
	selectCheckout: function()
   	    {
			dijit.byId('BasketDoneDialog').hide();
			dijit.byId('AuthDialog').hide();
			if ( getBasketCount() > 0 )
			{
				if ( !customerLoggedIn() )
				{
					this.showAuthDialog();
				}
				else
				{
					this.selectShipping();
				}	
			}
			else
			{
				signAlert ( 'Info', 'Es befinden sich keine Artikel im Warenkorb.' );
			}
	    },
	selectStartOver: function()
	    {
	    	dijit.byId('BasketDoneDialog').hide();
	    	sign.reset();
	    	// alert ( 'selectStartOver() not implemented.')
	    },
	flushBasket: function()
	{
	      	this.debug ( 'selectFlushBasket() flusing basket...');
			progressPushRefresh ( 'basket', 'Warenkorb' );
		    xhrGetDelayed ( 'basketflush', 'gotBasket' );	
	},
	getFromRepo: function( id )
	{
	      	this.debug ( 'getFromRepo() id='+id );
			progressPushLoad ( 'repo', 'Repository' );
		    xhrGetDelayed ( 'repoget/item/'+id, 'gotRepo' );	
	},
	selectFlushBasket: function()
	   {
		dijit.byId('FlushBasketDialog').show();
		announce ( 'FLUSH', '', '' );
	   },
	customerLogout: function()
	{
		progressPushRequest ( 'logout', 'Kunde abmelden');
		xhrGetDelayed ( 'logout', 'gotCustomerData' );
	},
	customerLoginByAP: function()
	{
		var ap = '';
		for (var i=0;i<document.apform.length;i++)
		{
			if (document.apform.elements[i].checked==true) 
				{
			    ap=document.apform.elements[i].value;
				}
		} 
		var ap = document.apform.ap.value;
		var args = {};
		setUser ( user );
		args['loginAP'] = ap;
		// this.debug ( 'customerLoginByData()' );
		// alert ( 'Login with args: '+args);
		progressPushRequest ( 'login', 'Kunde anmelden');
		xhrPost ( 'login', 'gotLoginResponse', args );
	},
	sendRecomm: function (m1,m2,m3,m4)
	{
		var args = {};
		args['m1'] = m1;
		args['m2'] = m2;
		args['m3'] = m3;
		args['m4'] = m4;
		progressPushRequest ( 'recomm', 'Weiterempfehlung');
		xhrPost ( 'recomm', 'gotRecommResponse', args );
	},
	customerLoginByData: function( user, pass )
	{
		// alert ( 'customerLoginByData() user='+user+', pass='+pass);
		var args = {};
		setUser ( user );
		args['loginUser'] = user;
		args['loginPass'] = pass;
		// this.debug ( 'customerLoginByData()' );
		// alert ( 'Login with args: '+args);
		progressPushRequest ( 'login', 'Kunde anmelden');
		xhrPost ( 'login', 'gotLoginResponse', args );
	},
	customerLogin: function( args )
	{
		this.debug ( 'customerLogin()' );
		// console.log ( args );
		// alert ( 'Login with args: '+args);
		progressPushRequest ( 'login', 'Kunde anmelden');
		xhrPost ( 'login', 'gotLoginResponse', args );
	},
	selectBasketZoomItem: function ( item_id )
	{
		progressPushRequest ( 'basketzoom', 'Warenkorbdetails');
		xhrGetDelayed ( 'basketgetitem/id/'+item_id, 'gotBasketZoomItem' );
	},
	setEventHandler: function()
	{
	 // dojo.connect(dojo.byId('BasketActionFlush'),  'onclick', function(){sign.selectFlushBasket()} );
     // dojo.connect(dojo.byId('BasketActionFlush'),  'onclick', 'selectFlushBasket' );
	},
	showZoomImage: function ()
	{
		var new_zoom_src = this.getPreviewURL()+queryStringExtd()+queryUuid();
		dojo.byId('ZoomImage').src = new_zoom_src;
		// dojo.byId('ZoomImage').setAttribute ( 'width', '100%');
		dijit.byId('ZoomDialog').show();
	},
	incWaitCounter: function ()
	{
		waitCounter++;
		progressPop ( 'init' );
		progressPush ( 'init', 'Warte auf Daten ('+waitCounter+')' );
	},
	setStatusText: function ( s_text )
		{ 
		if ( ( s_text != null ) && ( s_text.length > 0 ) ) 
			{
			setStatus ( 'Ihre Auswahl: '+s_text );
			}
			else
			{
			setStatus ( 'Keine Auswahl' );
			}
		},
	 newCustB2BChanged: function ( value )
	 {
			// console.log ( value );
			var filled = true;
			
			var fields = new Array("Contact","Street","ZIP","City","Country"); // ,"Phone","Fax"
			
			if ( dijit.byId('newCustomerName').getValue().length < 3 )
			{
				filled = false;
			}
			
			for (var i = 0; i < fields.length; ++i) 
				{
				if ( dijit.byId('newCustomer'+fields[i]).getValue().length < 2 )
					{
					filled = false;
					}
				}

			if ( filled == true )
			{
				if ( value ) 
				{ 
					this.debug ( 'newCustButton: enable' );
					dijit.byId('newCustButton').setAttribute ( 'disabled', false ); 
				} 
				else 
				{ 
					this.debug ( 'newCustButton: disable' );
					dijit.byId('newCustButton').setAttribute ( 'disabled', true ); 
				}
			}
			else
			{
			dijit.byId('CustomerB2B').checked = false;
			signAlert ( 'Info', 'Bitte pr&uuml;fen Sie Ihre Angaben auf Vollst&auml;ndigkeit.');
			}
	 },
	 selectBasketRemoveItem: function ( basket_item_id )
		{
		 setCurrentItem ( basket_item_id );
		 dojo.byId('RemoveItemPos').innerHTML = parseInt( basket_item_id) + 1;
		 dijit.byId ( 'RemoveItemDialog').show();	
		},
	 basketRemoveItem: function ( basket_item_id )
		{
		progressPushRefresh ( 'basket', 'Warenkorb' );
	    xhrGetDelayed ( 'basketremove/id/'+basket_item_id, 'gotBasket' );	
		},
	basketIncItemQty: function ( basket_item_id )
	{
		progressPushRefresh ( 'basket', 'Warenkorb' );
		xhrGetDelayed ( 'basketincqty/id/'+basket_item_id, 'gotBasket' );	
	},
	basketDecItemQty: function ( basket_item_id )
	{
		progressPushRefresh ( 'basket', 'Warenkorb' );
		xhrGetDelayed ( 'basketdecqty/id/'+basket_item_id, 'gotBasket' );	
	},
	setNewItemQty: function ( item, qty )
	{
		progressPushRefresh ( 'basket', 'Warenkorb' );
		xhrGetDelayed ( 'basketsetqty/id/'+item+'/qty/'+qty, 'gotBasket' );    
	},
	goTabLayout: function()
	{
		selectTabLayout();
	},
	goTabMaterial: function()
	{
		selectTabMaterial();
	},
	goTabBasket: function()
	{
		selectInfoTab ( 'Basket' );
	},
	goTabFormat: function()
	{
		selectTabFormat();
	},
	goTabText: function()
	{
		// alert ( 'goTabText()');
		selectTabText();
	},
	goTabOrder: function()
	{
		selectTabOrder();
	},
	setTextColor: function ( color )
	{
		// alert ( 'setTextColor() color='+color );
		var edit = dijit.byId('SigntextEditor');
		if ( edit == null )
		{
			alert ( 'Cannot access editor.' );
		}
		else
		{
			// edit.execCommand('foreColor',false, color );
			// edit.execCommand('forecolor',false, color );
			// edit.execCommand('foreground-color',false, color );
			// edit.execCommand('setforecolor', false, color );
			// alert('Called setTextColor()');
			// edit.execCommand('useCSS', false, false);
			// edit.execCommand('hiliteColor', '000000' );
			edit.execCommand('foreColor', color );
			
			// edit.editorObject.className = 'bodyRed';
			// edit.style = 'border: 3px solid blue;';
			// edit.setAttribute ( 'style', 'background-color: green');
			// edit.addStyleSheet ( '/projects/signdesigner/css/editor_blue.css');
			
			var eBody;
			 if ( dojo.isIE ) 
			 {
			  // eBody = document.frames['SingtextEditor_iframe']; // .body;
			 } 
			 else 
			 {
			  // eBody = edit.iframe.contentDocument; // .body;
			  // eBody = edit.iframe;  //.contentDocument; // .body;
			 }
			// eBody.bgColor = '#888888';
			// edit.execCommand('hilitecolor', '888888' );
			
			// eBody.className = 'bodyRed';
			
			sign.refreshPreview();
			// edit.execCommand('forecolor', color );
			// edit.execCommand('foreground-color', color );
			// edit.execCommand('setforecolor', color )
			// alert ( 'setColor() color '+color+' done!');
		}
	},
	setPostLogin: function ( post_login_cmd )
	{
		post_login = post_login_cmd;
	},
	showWelcomeScreen: function()
	{
		if ( dijit.byId('WelcomeDialog') )
			{
			dijit.byId('WelcomeDialog').show();
			announce ( 'WELCOME', '', '' );
			}
		else
			{
			// alert ( 'Unable to show WelcomeDialog!');
			}
	},
	checkNewCustForm: function()
	{		
		 
	},
	showHelpScreen: function()
	{
		if ( dijit.byId('HelpDialog') )
			{
			dijit.byId('HelpDialog').show();
			announce ( 'WELCOME', '', '' );
			}
		else
			{
			alert ( 'Unable to show HelpDialog!');
			}
	},
	selectChangeItemQty: function ( basket_item_id, qty )
	{
		setCurrentItem ( basket_item_id );
		dijit.byId('newItemQty').setValue ( qty );
		dojo.byId('ChangeItemPos').innerHTML = parseInt( basket_item_id) + 1;
		dijit.byId('ChangeQtyDialog').show();
	},
	xhrGet: function (uri, callback)
	{
		xhrGet ( uri, callback );
	},
	getCurrentItem: function ()
	{
		return current_item;
	},
	noop: function()
	{
	},
	getTinyMode: function()
	{
	return tiny;
	},
	hideInitScreen: function()
	{
	progressPop ( 'init' );
	},
	refreshPreview: function()
		{		
		var preview = dojo.byId ('PreviewImage');
		var preview_link = dojo.byId ('PreviewImageLink');		
		var new_preview_src = this.getPreviewURL()+queryStringExtd()+queryUuid();
		
		this.debug ( 'refreshPreview() url='+new_preview_src );
		setStatus ( 'Aktualisiere Voransicht.' );
		preview.src = new_preview_src
		
		// DEBUG PREVIEW IMAGE
		// preview_link.innerHTML = 'link';
		// preview_link.setAttribute ( 'href', new_preview_src );
		// dojo.byId('zoomImage').href =  new_zoom_src;
		}
	}
})();

sign.debug = function(msg)
{
	console.log( 'sign() DEBUG: '+msg );	
}

sign.info = function()
{
	this.debug ( "sign_id"+this.sign_id );
}

function selectFormat ()
{
var widget = dijit.byId('FormatCombo');
var value = widget.getValue();
// console.log ( widget );
sign.selectFormat ( widget.getValue(), widget.getDisplayedValue());
sign.loadBaseColor ();
sign.loadBorderColor ();
}
function initSign()
{	
// alert ( 'in onLoad');
// alert ( 'readyState='+document.readyState );

if ( 1 == 2 )
{
var zendDijits = [{"id":"titlePane","params":{"region":"top","dojoType":"dijit.layout.ContentPane"}}]; //,{"id":"Grundform","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Material","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Format","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Layout","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Schriftart","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Text","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"count","params":{"smallDelta":1,"constraints":"{\"min\":1,\"max\":9999}","defaultTimeout":100,"timeoutChangeRate":100,"dojoType":"dijit.form.NumberSpinner"}},{"id":"basketButton","params":{"dojoType":"dijit.form.Button"}},{"id":null,"params":{"dojoType":"dijit.form.Form"}},{"id":"Bestellen","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"WorkTabs","params":{"dojoType":"dijit.layout.TabContainer"}},{"id":"mainPane","params":{"region":"left","splitter":"false","dojoType":"dijit.layout.ContentPane"}},{"id":"Info","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Basket","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"Account","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"About","params":{"dojoType":"dijit.layout.ContentPane"}},{"id":"NavTabs","params":{"dojoType":"dijit.layout.TabContainer"}},{"id":"navPane","params":{"style":"","region":"center","splitter":"false","orientation":"vertical","dojoType":"dijit.layout.ContentPane"}},{"id":"statusPane","params":{"region":"bottom","style":"height: 38px; border-top: 1px solid #888888; border-bottom: 1px solid #888888; background: url(..\/img\/button_r_bg.gif) #EAE9E5","dojoType":"dijit.layout.ContentPane"}},{"id":"masterLayout","params":{"design":"headline","persist":"true","dojoType":"dijit.layout.BorderContainer"}}];

// alert ( 'Initialize Dijits...');

dojo.forEach(zendDijits, function(info) 
		{
		var n = dojo.byId(info.id);
		if (null != n) 
			{
			dojo.attr(n, dojo.mixin({ id: info.id }, info.params));
			}
		});
// alert ( 'initialized!');
// dojo.parser.parse();

djConfig.searchIds.push("WelcomeScreen");

dojo.forEach(djConfig.searchIds, function(id)
	{
    dojo.parser.parse(dojo.byId(id));
    });
}

// dojo.parser.parse ("WelcomeScreen");
// dojo.parser.parse();
// alert ( 'Parse done!');

// dojo.parser.parse();

if ( dojo.isIE )
	{
	// alert('IE6');
	}

// console.log ( 'initSign() called');
sign.setEditorHandler();
sign.setTabHandler();
sign.debugOn();
sign.setTabContainerId   ( 'WorkTabs' );
sign.setPreviewImageID ( 'prevImg' );
sign.setInfoIdPrefix   ( 'Info' );
if ( sign.getTinyMode() == 0 )
	{
	sign.loadAll();
	}
	else
	{
	sign.hideInitScreen();
	}
sign.resetTabs();

sign.showWelcomeScreen();
}



