/* ============================================================================================
 * Copyright (c) 2008 Muhammet TURŞAK (tursoft@gmail.com, www.tursoft.net)
 * Dual licensed
 *   - GPL http://www.gnu.org/licenses/gpl.html and 
 *   - MIT http://www.opensource.org/licenses/mit-license.php
 
===============================================================================================
# INFORMATION and META DATA ABOUT LIBRARY
-----------------------------------------------------------------------------------------------
NAME                : MyImgButton
VERSION             : v1.0
UPDATE DATE         : 23.11.2008

AUTHOR              : Muhammet TURŞAK (tursoft@gmail.com, www.tursoft.net)
DESCRIPTION         : A jquery plugin to easily make rollover buttons from images 
LICENSING           : 
            - GPL http://www.gnu.org/licenses/gpl.html and 
            - MIT http://www.opensource.org/licenses/mit-license.php

DEPENDENT FILES     : 
    - jquery-1.2.6.js  (or higher)
    - tursoft.shared.v1.1.js
    - default.css (MyTextboxEffects styles)    

TESTED BROWSERS     : IE 8 Beta, Firefox 3.0.4

KNOWN BUGS / ISSUES : 
    - No known bugs or issues
    
===============================================================================================
# DOCUMENTATION
-----------------------------------------------------------------------------------------------
SUPPORTED TAGS      : img, input[image]

METHODS             : 
    - MyImgButton()
        Function Options; 
            - <empty>
             		
		Source Attributes;
            - imageSrc		: Source URL of normal state image
			- imageSrcHover	: Source URL of hover state image
			- imageSrcDown	: Source URL of down state image
			- href			: Link URL
 ============================================================================================ */

(function($){
	
	// ==================================================================
	var $$ = $.fn.MyImgButton = function() {
	
	    var $preloadImageList=new Array();
	    
		var result=$(this).each(function() {
							var $this=$(this);
							$this.$=function() {};
							$this.$.ID=this.id;
	
							$$.onParseData($this);
							$$.onInitView($this, $preloadImageList);
		            });
		
		// preload Images
		MM_preloadImages2($preloadImageList);	
		return result;			
	};

	// ==================================================================
	$$.SupportedTags=new Array("input", "img");
	$$.isSupportedTag=function($this) {
		var i=0;
		for(i=0;i<$$.SupportedTags.length;i++)
		{
			if ($this[0].nodeName.toUpperCase()==$$.SupportedTags[i].toUpperCase())
				return true;
		}
		
		return false;
	};
	
	$$.getValue=function($value, $defaultValue) {
		if ($value==null || $value==undefined)
			$value="";
			
		if ($defaultValue==null || $defaultValue==undefined)
			$defaultValue="";
			
		$defaultValue=new String($defaultValue);
		$value=new String($value);
		
		if ($defaultValue=="null" || $defaultValue==undefined)
			$defaultValue="";		
		return ($value!=null && $value!=undefined && $value.trim()!=""?$value:$defaultValue);
	};
	
	$$.getAttrValue=function($this, $attrName) {
		return $$.getAttrValue($attrName, "");
	};
	
	$$.getAttrValue=function($this, $attrName, $defaultValue) {
		var $value=$this.attr($attrName);
		return $$.getValue($value, $defaultValue);
	};
		
	
	$$.onParseData=function($this) {
	
		// check tagname is supported
		if (!$$.isSupportedTag($this))
			return;
		
		// parseData
		var tagName=$this[0].nodeName.toLowerCase().trim();
		
		var tagImageSrc			="src";
		var tagHoverImageSrc	="srcHover";
		var tagDownImageSrc		="srcDown";
		var tagHref				="href";
					
		$this.$.options 	= {
			imageSrc		: $$.getAttrValue($this, tagImageSrc),
			imageSrcHover	: $$.getAttrValue($this, tagHoverImageSrc),
			imageSrcDown	: $$.getAttrValue($this, tagDownImageSrc),
			href			: $$.getAttrValue($this, tagHref)
		}
		
		// alert("textVisibility: "+ $this.$.options.textVisibility+", imageVisibility: "+$this.$.options.imageVisibility);
	};

	// ==================================================================
	$$.onInitView=function($this, $preloadImageList) {
		$this.css("cursor","hand");
		
		// preloading images
	    $preloadImageList.push($this.$.options.imageSrcHover);
	    $preloadImageList.push($this.$.options.imageSrcDown);
		
		// Events
		$this.click(function(event){
				event.preventDefault();
				event.stopPropagation();

				if ($this.$.options.href!="") {
							document.location=$this.$.options.href;
							return; }

				// fire event
				try {
					$this.trigger('click', {button:$this});				
				} catch(err) {}	
				
			});
		
		$this.mousedown(function(event){
				if ($this.$.options.imageSrcDown!="") {
						$this.attr("src", $this.$.options.imageSrcDown)
					}
			});	
		
		$this.mouseup(function(event){
				if ($this.$.options.imageSrcDown!="") {
						$this.attr("src", $this.$.options.imageSrc)
					}
			});				
					
		$this.hover(
					function(){ 
						if ($this.$.options.imageSrcHover!="") {
								$this.attr("src", $this.$.options.imageSrcHover)
							}
					},
					
					function(){ 
						if ($this.$.options.imageSrcHover!="") {
								$this.attr("src", $this.$.options.imageSrc)
							}	
					}
				);	
		}
		
})(jQuery);