/**
 * AUDI JavaScript library: DOM related fuctions / helpers
 * 
 * @projectDescription	DOM related utilities and helper classes 
 * @namespace			layer
 *
 * @author 				$Author: hhoettecke $
 * @version				$Revision: 6416 $
 * @copyright			NEUE DIGITALE GmbH, Berlin
 * 
 * @jslint: 2008-10-31
 * 
 * @file:				audi_ngw.dom.js
 * $URL: https://svn.pvtool.org/svn/day_audi_ngw/trunk/ngw_base/frontend/js/audi/audi.dom.js $
 */

/* create namespace */
audi_ngw.namespace(audi_ngw,'dom');

	audi_ngw.dom._oRegisteredUniqueElements = {};

/* CREATE JQUERY PLUGINS */
/**
 * @see audi_ngw.dom.identify 
 */
$.fn.audi_identify = function() {
  audi_ngw.dom.identify(this);
  return this;
};

/**
 * @see audi_ngw.animation.unsetRunning
 */
$.fn.audi_unsetUnique = function() {
	this.each(
		function() {
			audi_ngw.dom.unsetUnique(jQuery(this).audi_identify().attr('id'));
	});
	return this;
};
/**
 * @see audi_ngw.animation.setRunning
 */
$.fn.audi_setUnique = function() {
	this.each(
		function() {
			audi_ngw.dom.setUnique(jQuery(this).audi_identify().attr('id'));
	});
	return this;
};


/**
 * Adds an unique ID to the supplied DOM element if necessary. Preserves existing IDs. Returns element.id
 * @method identify
 * @param {HTMLElement} Element
 * @return {String} ID 
 */

// set base values onload, increase counter every time identify() is called.
// since the base values are resetted on every page-load, we don't need additional random numbers
// create timestamp as unique prefix
audi_ngw.dom._identifyBase = ['audi_genericId_',new Date().getTime()].join('');
// generate base number to start counting
audi_ngw.dom._identifyCounter = 0;

audi_ngw.dom.identify = function (element) {
	 // op & msie gets id as string "null"
//	var _sPrefix = 'audi_genericId_';
	var _sId = jQuery(element).attr('id');
	if (!_sId  || _sId  === null || _sId  == 'null') {
//		jQuery(element).attr('id', ((_sPrefix + new Date().getTime() + '' + Math.floor(Math.random() * 10000)).toString()));
		jQuery(element).attr('id', ((audi_ngw.dom._identifyBase+'_'+audi_ngw.dom._identifyCounter++).toString()));
	}
	return jQuery(element).attr('id');
};



/**
 * Removes unique flag on element
 * @method unsetUnique
 * @param {String} Identifier
 * @return {Void}
 */
audi_ngw.dom.unsetUnique = function(sId){
	sId = (sId.indexOf('#') === -1) ? "#"+sId : sId;
	audi_ngw.dom._oRegisteredUniqueElements[sId] = false;
	delete audi_ngw.dom._oRegisteredUniqueElements[sId];
};

/**
 * Sets element as uique, prevent multiple operations
 * @method setUnique
 * @param {String} Identifier
 * @return {Void}
 */
audi_ngw.dom.setUnique = function(sId){
	sId = (sId.indexOf('#') === -1) ? "#"+sId : sId;
	audi_ngw.dom._oRegisteredUniqueElements[sId] = true;
};

/**
 * Gets element status by id 
 * @method getUnique
 * @param {String} Identifier
 * @return {Void}
 */
audi_ngw.dom.getUnique = function(sId){
	sId = (sId.indexOf('#') === -1) ? "#"+sId : sId;
	return !!audi_ngw.dom._oRegisteredUniqueElements[sId] || false;
};



