/*
 * CSS Helper is a jQuery plugin to help us to apply CSS for a particular 
 * browser or a particular browser version without any CSS hack
 *
 * We just need to use prefix in CSS to identify browser
 *
 * For Example
 * For Internet Explorer we can use:
 * .ie element { property: value; }
 *
 * We can also apply it for a particular version of browser
 * .ff3_6 element { property: value;} // For Forefox 3.6

 * Note: To define a browser version have decimal ('.') we have
 * to replace it with underscore ('_')
 *
 * Prefix for browsers are below:
 * Internet Explorer  :  ie
 * Firefox            :  ff
 * Safari             :  safari
 * Chrome             :  chrome
 * Opera              :  opera
 *
 * Prefix for mobile and tablets are below:
 * iPad               :  iPad
 * iPod               :  iPod
 * iPod               :  iPod
 * Android            :  android
 * Web OS             :  webOS
 * 
 */
 
 (function($){
	
	// CSS helper to allow us to use prefix in CSS instead of CSS hacks
	$.fn.cssHelper = function() { 
		browser.name(); // Calling browser class's name method to add classes in HTML
		mobile.platform(); // Calling mobile class's plateform method to add class in HTML
	};
	
	// Browser Class get to browser and browser's version to add it in HTML
	var browser = {
		
		// Get web Browser's name
		name: function() {
			
			// If web browser is Internet Explorer
			if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){
				var version = new Number(RegExp.$1); // Storing browser's version in to variable version
				this.addClass('ie', version); // Calling addClass function to add classes on HTML for Internet Explorer
			}
			
			// If web browser is Mozila Firefox
			else if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
				var version = new Number(RegExp.$1); // Storing browser's version in to variable version
				this.addClass('ff', version); // Calling addClass function to add classes on HTML for Mozila Firefox
			}				
			
			//IF web browser is Safari
			else if(/Safari/.test(navigator.userAgent) && (/Version[\/\s](\d+\.\d+)/.test(navigator.userAgent))) {
				var version = new Number(RegExp.$1); // Storing browser's version in to variable version
				this.addClass('safari', version); // Calling addClass function to add classes on HTML for Safari
			}
			
			// If web browser is Chrome
			else if(/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) {
				var version = new Number(RegExp.$1); // Storing browser's version in to variable version
				this.addClass('chrome', version); // Calling addClass function to add classes on HTML for Chrome
			}
			
			// If web browser is Opera
			else if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
				var version = new Number(RegExp.$1); // Storing browser's version in to variable version
				this.addClass('opera', version); // Calling addClass function to add classes on HTML for Opera
			}
		},
		
		// Add classes in HTML to allow use prefix instead of CSS hacks
		addClass: function(browser, version) {
		
			// If browser version in an integer
			if(is_int(version)) {
				$('html').addClass(browser + ' ' + browser + (version)); // Adding Classes in HTML
			}
			
			// If browser version is a floating value
			else {			
				/[\.?\s](\d)/.exec(version);
				decimal = RegExp.$1			
				$('html').addClass(browser + ' ' + browser + parseInt(version) + '_' + decimal); // Adding Classes in HTML
			}
		}	
	}
	
	// Class to identify mobile platform if application is open in a mobile device (iPhone, android, webOS etc.)
	var mobile = {
		
		// Get mobile platform's name
		platform: function() {
			
			// If platform is iPad
			if (/iPad/i.test(navigator.userAgent)){
				$('html').addClass('iPad'); // Adding Classes in HTML
			}
			
			// If platform is iPod
			else if (/iPod/i.test(navigator.userAgent)){
				$('html').addClass('iPod'); // Adding Classes in HTML
			}
			
			// If platform is iPhone
			else if (/iPhone/i.test(navigator.userAgent)){
				$('html').addClass('iPhone'); // Adding Classes in HTML
			}
			
			// If platform is android
			else if (/android/i.test(navigator.userAgent)){
				$('html').addClass('android'); // Adding Classes in HTML
			}
			
			// If platform is webOS
			else if (/webOS/i.test(navigator.userAgent)){
				$('html').addClass('webOS'); // Adding Classes in HTML
			}
		}
	}
	
	// Function to check number is an integer or not
	function is_int(value){		
		return (parseFloat(value) == parseInt(value)) && !isNaN(value) ? true : false;		
	}
	
})(jQuery);

// Applying css_helper on document ready
$(document).ready(function() { $(document).cssHelper(); });
