text: //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
  //>>description: Tizen core library
  //>>label: Tizen core
  //>>group: Tizen:Core
  
  define( [ 
  	'jquery',
  	'jqm/jquery.mobile.core',
  	'./jquery.mobile.tizen.configure',
  	'./util/ensurens'
  	], function ( jQuery ) {
  
  //>>excludeEnd("jqmBuildExclude");
  
  /*
   * jQuery Mobile Widget @VERSION
   *
   * TODO: remove unnecessary codes....
   *
   * This software is licensed under the MIT licence (as defined by the OSI at
   * http://www.opensource.org/licenses/mit-license.php)
   * 
   * ***************************************************************************
   * Copyright (C) 2011 by Intel Corporation Ltd.
   * 
   * Permission is hereby granted, free of charge, to any person obtaining a
   * copy of this software and associated documentation files (the "Software"),
   * to deal in the Software without restriction, including without limitation
   * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   * and/or sell copies of the Software, and to permit persons to whom the
   * Software is furnished to do so, subject to the following conditions:
   * 
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   * 
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   * DEALINGS IN THE SOFTWARE.
   * ***************************************************************************
   *
   * Authors: Kalyan Kondapally <kalyan.kondapally@intel.com>
   */
  
  ensureNS("jQuery.mobile.tizen");
  
  (function () {
  jQuery.extend(jQuery.mobile.tizen, {
  	disableSelection: function (element) {
  		this.enableSelection(
  			$(element).find('*').not( 'input, [type="text"], textarea' ),
  			'none'
  		);
  		return true;
  	},
  
  	enableSelection: function (element, value) {
  		var val;
  		switch ( value ) {
  			case 'text' :
  			case 'auto' :
  			case 'none' :
  				val = value;
  			break;
  			default :
  				val = 'auto';
  			break;
  		}
  		return $(element).css( {
  			'user-select': val,
  			'-moz-user-select': val,
  			'-webkit-user-select': val,
  			'-o-user-select': val,
  			'-ms-transform': val
  		} );
      },
  
      disableContextMenu: function(element) {
  	var self = this;
  	$(element).find('*').each( function() {
  		if( ( $(this).get(0).tagName !== 'INPUT' &&
  			$(this).attr("type") !== 'text' ) &&
  			$(this).get(0).tagName !== 'TEXTAREA' ) {
  			self._disableContextMenu( this );
  		}
  	} );
      },
  
      _disableContextMenu: function(element) {
  
  	$(element).each( function() {
  		$(this).bind("contextmenu", function( event ) {
  			return false;
  		} );
  	} );
      },
  
      enableContextMenu: function(element) {
  	$(element).each( function() {
  		$(this).unbind( "contextmenu" );
  	} );
      },
  
      // Get document-relative mouse coordinates from a given event
      // From: http://www.quirksmode.org/js/events_properties.html#position
      documentRelativeCoordsFromEvent: function(ev) {
          var e = ev ? ev : window.event,
              client = { x: e.clientX, y: e.clientY },
              page   = { x: e.pageX,   y: e.pageY   },
              posx = 0,
              posy = 0;
  
          // Grab useful coordinates from touch events
          if (e.type.match(/^touch/)) {
              page = {
                  x: e.originalEvent.targetTouches[0].pageX,
                  y: e.originalEvent.targetTouches[0].pageY
              };
              client = {
                  x: e.originalEvent.targetTouches[0].clientX,
                  y: e.originalEvent.targetTouches[0].clientY
              };
          }
  
          if (page.x || page.y) {
              posx = page.x;
              posy = page.y;
          }
          else
          if (client.x || client.y) {
              posx = client.x + document.body.scrollLeft + document.documentElement.scrollLeft;
              posy = client.y + document.body.scrollTop  + document.documentElement.scrollTop;
          }
  
          return { x: posx, y: posy };
      },
  
  	// TODO : offsetX, offsetY. touch events don't have offsetX and offsetY. support for touch devices.
      // check algorithm...
      targetRelativeCoordsFromEvent: function(e) {
          var coords = { x: e.offsetX, y: e.offsetY };
  
          if (coords.x === undefined || isNaN(coords.x) ||
              coords.y === undefined || isNaN(coords.y)) {
              var offset = $(e.target).offset();
              //coords = documentRelativeCoordsFromEvent(e);	// Old code. Must be checked again.
              coords = $.mobile.tizen.documentRelativeCoordsFromEvent(e);
              coords.x -= offset.left;
              coords.y -= offset.top;
          }
  
          return coords;
      }
  });
  
  })();
  
  //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
  } );
  //>>excludeEnd("jqmBuildExclude");
  