/*
 * UPDATED: 25.09.08
 *
 * jqTransform
 * by mathieu vilaplana mvilaplana@dfc-e.com
 * Designer ghyslain armand garmand@dfc-e.com
 *
 *
 * Version 1.0
 *
 ******************************************** */
 
(function($){
	var defaultOptions = {preloadImg:true};
	var jqTransformImgPreloaded = false;

	var jqTransformPreloadHoverFocusImg = function(strImgUrl) {
		//guillemets to remove for ie
		strImgUrl = strImgUrl.replace(/^url\((.*)\)/,'$1').replace(/^\"(.*)\"$/,'$1');
		var imgHover = new Image();
		imgHover.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-hover.$1');
		var imgFocus = new Image();
		imgFocus.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-focus.$1');				
	};

	
	/***************************
	  Labels
	***************************/
	var jqTransformGetLabel = function(objfield){
		var selfForm = $(objfield.get(0).form);
		var oLabel = objfield.next();
		if(!oLabel.is('label')) {
			oLabel = objfield.prev();
			if(oLabel.is('label')){
				var inputname = objfield.attr('id');
				if(inputname){
					oLabel = selfForm.find('label[for="'+inputname+'"]');
				} 
			}
		}
		if(oLabel.is('label')){return oLabel.css('cursor','pointer');}
		return false;
	};
	
	/* Hide all open selects */
	var jqTransformHideSelect = function(oTarget){
		var ulVisible = $('.jqTransformSelectWrapper ul:visible');
		ulVisible.each(function(){
			var $select = $(this).parents(".jqTransformSelectWrapper:first").find("select").get(0);
			//do not hide if clicke on the label object associated to the select
			if( !(oTarget && $select.oLabel && $select.oLabel.get(0) == oTarget.get(0)) ){$(this).hide();}
		});
	};
	/* Check for an external click */
	var jqTransformCheckExternalClick = function(event) {
		if ($(event.target).parents('.jqTransformSelectWrapper').length === 0) { jqTransformHideSelect($(event.target)); }
	};

	/* Apply document listener */
	var jqTransformAddDocumentListener = function (){
		$(document).mousedown(jqTransformCheckExternalClick);
	};	
			
	/* Add a new handler for the reset action */
	var jqTransformReset = function(f){
		var sel;
		$('.jqTransformSelectWrapper select', f).each(function(){sel = (this.selectedIndex<0) ? 0 : this.selectedIndex; $('ul', $(this).parent()).each(function(){$('a:eq('+ sel +')', this).click();});});
		$('a.jqTransformCheckbox, a.jqTransformRadio', f).removeClass('jqTransformChecked');
		$('input:checkbox, input:radio', f).each(function(){if(this.checked){$('a', $(this).parent()).addClass('jqTransformChecked');}});
	};

	/***************************
	  Buttons
	 ***************************/
	$.fn.jqTransInputButton = function(){
		return this.each(function(){
			$(this).replaceWith('<button id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +' jqTransformButton"><span ><span>'+ $(this).attr('value') +'</span></span>');
		});
	};
	
	/***************************
	  Text Fields 
	 ***************************/
	$.fn.jqTransInputText = function(){
		return this.each(function(){
			var safari = $.browser.safari; /* We need to check for safari to fix the input:text problem */
			var chrome = $.browser.chrome;
			var ie = $.browser.msie;
			var ie6 = false;
			var ie7 = false;
			var ie8 = false;
			if (ie)
			{
				if ($.browser.version.charAt(0) == '6') ie6  = true;
				if ($.browser.version.charAt(0) == '7') ie7  = true;
				if ($.browser.version.charAt(0) == '8') ie8  = true;
			}
			var $input = $(this);
			if($input.hasClass('jqtranformdone') || !$input.is('input')) {return;}
			$input.addClass('jqtranformdone');
	
			var oLabel = jqTransformGetLabel($(this));
			oLabel && oLabel.bind('click',function(){$input.focus();});
	
			var inputSize=$input.width();
			if($input.attr('size')){
				inputSize = $input.attr('size')*10;
				$input.css('width',inputSize);
				if(chrome) $input.css('padding-top',0);
			}
			if($input.hasClass('search')){
				inputSize = 135;
				$input.css('width',inputSize);
				
			}
			
			if($input.parent().hasClass('billing_state')){
				if (ie) inputSize = 84;
				if (safari) inputSize = 84;
				if (chrome) inputSize = 84;
				$input.css('width',inputSize);
			}
			if($input.parent().hasClass('halflength')){
				if (ie) inputSize = 70;
				if (safari) inputSize = 70;
				$input.css('width',inputSize);
			}
			$input.addClass("jqTransformInput").wrap('<div class="jqTransformInputWrapper"><div class="jqTransformInputInner"><div></div></div></div>');
			var $wrapper = $input.parent().parent().parent();
			$wrapper.css("width", inputSize+10);
			
			//$input
//				.focus(function(){$wrapper.addClass("jqTransformInputWrapper_focus");})
//				.blur(function(){$wrapper.removeClass("jqTransformInputWrapper_focus");})
//				.hover(function(){$wrapper.addClass("jqTransformInputWrapper_hover");},function(){$wrapper.removeClass("jqTransformInputWrapper_hover");})
			;
	
			/* If this is safari we need to add an extra class */
			safari && $wrapper.addClass('jqTransformSafari');
			safari && $input.css('width',$wrapper.width()+16);
			
			this.wrapper = $wrapper;
			
			
		});
	};
	
	/***************************
	  Check Boxes 
	 ***************************/	
	$.fn.jqTransCheckBox = function(){
		return this.each(function(){
			var $input = $(this);
			var inputSelf = this;
			
			if($input.hasClass('jqTransformHidden')) {return;}
	
			var oLabel=jqTransformGetLabel($input);
			$input.addClass('jqTransformHidden').wrap('<span class="jqTransformCheckboxWrapper"></span>');
			var $wrapper = $input.parent();
			var aLink = $('<a href="#" class="jqTransformCheckbox"></a>');
			$wrapper.prepend(aLink);
			// Click Handler
			aLink.click(function(){
					var $a = $(this);
					if (inputSelf.checked===true){
						inputSelf.checked = false;
						$a.removeClass('jqTransformChecked');
					}
					else {
						inputSelf.checked = true;
						$a.addClass('jqTransformChecked');
					}
					
					inputSelf.onchange && inputSelf.onchange();
					return false;
			});
			oLabel && oLabel.click(function(){aLink.trigger('click');});
			// set the default state
			this.checked && aLink.addClass('jqTransformChecked');		
		});
	};
	/***************************
	  Radio Buttons 
	 ***************************/	
	$.fn.jqTransRadio = function(){
		return this.each(function(){
			var $input = $(this);
			var inputSelf = this;
				
			if($input.hasClass('jqTransformHidden')) {return;}
	
			oLabel = jqTransformGetLabel($input);
			$input.addClass('jqTransformHidden').wrap('<span class="jqTransformRadioWrapper"></span>');
			var $wrapper = $input.parent();
			var aLink = $('<a href="#" class="jqTransformRadio" rel="'+ this.name +'"></a>');
			$wrapper.prepend(aLink);
			// Click Handler
			aLink
				.each(function(){
					this.radioElem = inputSelf;
					$(this).click(function(){
						var $a = $(this).addClass('jqTransformChecked');
						inputSelf.checked = true;

						// uncheck all others of same name
						$('a.jqTransformRadio[rel="'+ $a.attr('rel') +'"]',inputSelf.form).not($a).each(function(){
							$(this).removeClass('jqTransformChecked');
							this.radioElem.checked = false;
						});
						
						inputSelf.onchange && inputSelf.onchange();
						return false;					
					});
				});
			oLabel && oLabel.click(function(){aLink.trigger('click');});
			// set the default state
			inputSelf.checked && aLink.addClass('jqTransformChecked');
		});
	};
	
	/***************************
	  TextArea 
	 ***************************/	
	$.fn.jqTransTextarea = function(){
		return this.each(function(){
			var textarea = $(this);
	
			if(textarea.hasClass('jqtransformdone')) {return;}
			textarea.addClass('jqtransformdone');
	
			oLabel = jqTransformGetLabel(textarea);
			oLabel && oLabel.click(function(){textarea.focus();});
			
			var strTable = '<table cellspacing="0" cellpadding="0" border="0" class="jqTransformTextarea">';
			strTable +='<tr><td id="jqTransformTextarea-tl">&nbsp;</td><td id="jqTransformTextarea-tm">&nbsp;</td><td id="jqTransformTextarea-tr">&nbsp;</td></tr>';
			strTable +='<tr><td id="jqTransformTextarea-ml">&nbsp;</td><td id="jqTransformTextarea-mm"><div></div></td><td id="jqTransformTextarea-mr">&nbsp;</td></tr>';	
			strTable +='<tr><td id="jqTransformTextarea-bl">&nbsp;</td><td id="jqTransformTextarea-bm">&nbsp;</td><td id="jqTransformTextarea-br">&nbsp;</td></tr>';
			strTable +='</table>';					
			var oTable = $(strTable)
					.insertAfter(textarea)
					.hover(function(){
						!oTable.hasClass('jqTransformTextarea-focus') && oTable.addClass('jqTransformTextarea-hover');
					},function(){
						oTable.removeClass('jqTransformTextarea-hover');					
					})
				;
				
			textarea
				.focus(function(){oTable.removeClass('jqTransformTextarea-hover').addClass('jqTransformTextarea-focus');})
				.blur(function(){oTable.removeClass('jqTransformTextarea-focus');})
				.appendTo($('#jqTransformTextarea-mm div',oTable))
			;
			this.oTable = oTable;
			if($.browser.safari){
				$('#jqTransformTextarea-mm',oTable)
					.addClass('jqTransformSafariTextarea')
					.find('div')
						.css('height',textarea.height())
						.css('width',textarea.width())
				;
			}
		});
	};
	
	/***************************
	  Select 
	 ***************************/	
	$.fn.jqTransSelect = function(){
		return this.each(function(index){
			var safari = $.browser.safari; /* We need to check for safari to fix the input:text problem */
			var chrome = $.browser.chrome;
			var ie = $.browser.msie;
			var ie6 = false;
			var ie7 = false;
			var ie8 = false;
			if (ie)
			{
				if ($.browser.version.charAt(0) == '6') ie6  = true;
				if ($.browser.version.charAt(0) == '7') ie7  = true;
				if ($.browser.version.charAt(0) == '8') ie8  = true;
			}
			


			
			var $select = $(this);
			if($select.hasClass('jqTransformHidden')) {return;}
	
			var oLabel  =  jqTransformGetLabel($select);
			/* First thing we do is Wrap it */
			$select
				.addClass('jqTransformHidden')
				.wrap('<div class="jqTransformSelectWrapper inputbg"></div>')
			;
			var $wrapper = $select.parent().css({zIndex: 10-index});
			
			/* Now add the html for the select */
			
			$wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen inputbg"></a></div><ul></ul>');
			var $ul = $('ul', $wrapper).css('width',$select.width() );
			/* Now we add the options */
			$('option', this).each(function(i){
				var oLi = $('<li><a href="#" index="'+ i +'">'+ $(this).html() +'</a></li>');
				$ul.append(oLi);
			});
			/* Hide the ul and add click handler to the a */
			$ul.hide().find('a').click(function(){
					$('a.selected', $wrapper).removeClass('selected');
					$(this).addClass('selected');	
					/* Fire the onchange event */
					if ($select[0].selectedIndex != $(this).attr('index') && $select[0].onchange) { $select[0].selectedIndex = $(this).attr('index'); $select[0].onchange(); }
					$select[0].selectedIndex = $(this).attr('index');
					$('span:eq(0)', $wrapper).html($(this).html());
					$ul.hide();
					return false;
			});
			/* Set the default */
			$('a:eq('+ this.selectedIndex +')', $ul).click();
			$('span:first', $wrapper).click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
			oLabel && oLabel.click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
			this.oLabel = oLabel;
			
			/* Apply the click handler to the Open */
			var oLinkOpen = $('a.jqTransformSelectOpen', $wrapper)
				.click(function(){
					//Check if box is already open to still allow toggle, but close all other selects
					if( $ul.css('display')=='none' ) {jqTransformHideSelect();} 
					$ul.slideToggle('normal', function(){					
						var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);
						$ul.animate({scrollTop: offSet});
					});
					return false;
				})
			;
			//set the new width
			var iSelectWidth = $select.width();
			//alert (iSelectWidth);
			var oSpan = $('span:first',$wrapper);
			var newWidth = (iSelectWidth > oSpan.innerWidth())?iSelectWidth+oLinkOpen.outerWidth():$wrapper.width();
			
					$wrapper.css('width',newWidth-22);
					$ul.css('width',newWidth-24);
					oSpan.css('width',iSelectWidth-22);
			
			if(safari){
						$wrapper.css('width',newWidth-8);
							$ul.css('width',newWidth-6);
							oSpan.css('width',iSelectWidth-8);
							
							if($.browser.system$ == "MacOSX"){
								$wrapper.css('width',newWidth-24);
								$ul.css('width',newWidth-22);
								oSpan.css('width',iSelectWidth-24);
							}				
						}
			if(chrome){
						$wrapper.css('width',newWidth-24);
						$ul.css('width',newWidth-22);
						oSpan.css('width',iSelectWidth-24);
						}
						
			
			if($select.parent().parent().parent().parent().hasClass('topbuttons')){
					$wrapper.css('width',newWidth-36);
					$ul.css('width',newWidth-38);
					oSpan.css('width',iSelectWidth-36);
					if(safari){
							$wrapper.css('width',newWidth-18);
							$ul.css('width',newWidth-20);
							oSpan.css('width',iSelectWidth-18);
							}
			}
			if($select.parent().parent().hasClass('type')){
					$wrapper.css('width',newWidth-40);
					$ul.css('width',newWidth-42);
					oSpan.css('width',iSelectWidth-40);
					if(safari){
							$wrapper.css('width',newWidth-16);
							$ul.css('width',newWidth-18);
							oSpan.css('width',iSelectWidth-16);
							}
			}
			
			if($select.parent().parent().hasClass('card_type')){
					$wrapper.css('width',newWidth-0);
					$ul.css('width',newWidth-2);
					oSpan.css('width',iSelectWidth-0);
					if(ie7){
							$wrapper.css('width',newWidth+4);
							$ul.css('width',newWidth+2);
							oSpan.css('width',iSelectWidth+4);
					}
					if(safari){
							$wrapper.css('width',newWidth+34);
							$ul.css('width',newWidth+32);
							oSpan.css('width',iSelectWidth+34);
					}
							if($.browser.system$ == "MacOSX"){
									$wrapper.css('width',newWidth+8);
									$ul.css('width',newWidth+6);
									oSpan.css('width',iSelectWidth+8);
								}
					if(chrome){
							$wrapper.css('width',newWidth+10);
							$ul.css('width',newWidth+8);
							oSpan.css('width',iSelectWidth+10);
					}
					
				
			}
			if($select.parent().parent().hasClass('expiration')){
					if(ie7){
							$wrapper.css('width',newWidth-18);
							$ul.css('width',newWidth-16);
							oSpan.css('width',iSelectWidth-18);
						}
					if(safari){
							$wrapper.css('width',newWidth+8);
							$ul.css('width',newWidth+6);
							oSpan.css('width',iSelectWidth+8);
							
							if($.browser.system$ == "MacOSX"){
								$wrapper.css('width',newWidth-17);
								$ul.css('width',newWidth-15);
								oSpan.css('width',iSelectWidth-17);
							}
						}
					if(chrome){
							$wrapper.css('width',newWidth-16);
							$ul.css('width',newWidth-18);
							oSpan.css('width',iSelectWidth-16);
						}
			}
			
			if($select.parent().parent().hasClass('billing_state')) {
					if(ie7){
							$wrapper.css('width',newWidth-18);
							$ul.css('width',newWidth-16);
							oSpan.css('width',iSelectWidth-18);
						}
					if(safari){
							$wrapper.css('width',newWidth+0);
							$ul.css('width',newWidth-2);
							oSpan.css('width',iSelectWidth+0);
							
							if($.browser.system$ == "MacOSX"){
								$wrapper.css('width',newWidth-25);
								$ul.css('width',newWidth-23);
								oSpan.css('width',iSelectWidth-25);
							}	
						}
					if(chrome){
							$wrapper.css('width',newWidth-26);
							$ul.css('width',newWidth-30);
							oSpan.css('width',iSelectWidth-26);							
						}
			}
			if($select.parent().parent().hasClass('date_birth')){
					if(chrome){
							$wrapper.css('width',newWidth-18);
							$ul.css('width',newWidth-20);
							oSpan.css('width',iSelectWidth-18);
					}
					if(ie7){
							$wrapper.css('width',newWidth-18);
							$ul.css('width',newWidth-16);
							oSpan.css('width',iSelectWidth-18);
						}
					if(safari){
							$wrapper.css('width',newWidth+7);
							$ul.css('width',newWidth+5);
							oSpan.css('width',iSelectWidth+7);
							
							if($.browser.system$ == "MacOSX"){
								$wrapper.css('width',newWidth-18);
								$ul.css('width',newWidth-16);
								oSpan.css('width',iSelectWidth-18);
							}	
					}

			}
		});
	};
	$.fn.jqTransform = function(options){
		var self = this;
		var safari = $.browser.safari; /* We need to check for safari to fix the input:text problem */
		var opt = $.extend({},defaultOptions,options);
		
		/* each form */
		 return this.each(function(){
			var selfForm = $(this);
			if(selfForm.hasClass('jqtransformdone')) {return;}
			selfForm.addClass('jqtransformdone');
			
			$('input:submit, input:reset, input[type="button"]', this).jqTransInputButton();			
			$('input:text, input:password', this).jqTransInputText();			
			$('input:checkbox', this).jqTransCheckBox();
			/* $('input:radio', this).jqTransRadio(); JPM impacts functionality of gift options on scartaddress */
			$('textarea', this).jqTransTextarea();
			
			if( $('select', this).jqTransSelect().length > 0 ){jqTransformAddDocumentListener();}
			selfForm.bind('reset',function(){var action = function(){jqTransformReset(this);}; window.setTimeout(action, 10);});
			
		//	//preloading
//			if(opt.preloadImg && !jqTransformImgPreloaded){
//				jqTransformImgPreloaded = true;
//				var oInputText = $('input:text:first', selfForm);
//				if(oInputText.length > 0){
//					//pour ie on eleve les ""
//					var strWrapperImgUrl = oInputText.get(0).wrapper.css('background-image');
//					jqTransformPreloadHoverFocusImg(strWrapperImgUrl);					
//					var strInnerImgUrl = $('div.jqTransformInputInner',$(oInputText.get(0).wrapper)).css('background-image');
//					jqTransformPreloadHoverFocusImg(strInnerImgUrl);
//				}
//				
//				var oTextarea = $('textarea',selfForm);
//				if(oTextarea.length > 0){
//					var oTable = oTextarea.get(0).oTable;
//					$('td',oTable).each(function(){
//						var strImgBack = $(this).css('background-image');
//						jqTransformPreloadHoverFocusImg(strImgBack);
//					});
//				}
//			}
			
			
		}); /* End Form each */
				
	};/* End the Plugin */
	
	//OS detection
	

    /* the jQuery internal variables holding the browser information */
  
    $.browser.system$  = "NN";  /* underlying operating system */
    /* the system determination specification data structure */
    $.browser.system_spec$ = [
        /* Windows */
        [ navigator.userAgent,  "(Windows|Win32|Win64)", "Windows"],
        /* MacOSX */
        [ navigator.userAgent,  "(Macintosh|Darwin|Apple)", "MacOSX" ],
        /* Unix */
        [ navigator.userAgent,  "(BSD|Linux|SunOS|IRIX|Unix)", "Unix" ]
    ];

    /* driver for the system determination specification data structure */
    for (var i = 0; i < $.browser.system_spec$.length; i++) {
        var str = $.browser.system_spec$[i][0];
        var regex = RegExp(".*" + $.browser.system_spec$[i][1] + ".*");
        var subst = (typeof $.browser.system_spec$[i][2] !== "undefined" ? 
                     $.browser.system_spec$[i][2] : "$1");
        var system = str.replace(regex, subst);
        if (system !== null && system != str) {
            $.browser.system$ = system;
            break;
        }
    }

    /* information access methods */

    $.browser.system = function (match) {
        if (typeof match !== "undefined")
            return ($.browser.system$ == match);
        else
            return $.browser.system$;
    };
	

})(jQuery);

function findPos(obj) {
	var curtop = 0;
  		if (obj.offsetParent) {
  			do {
			curtop += obj.offsetTop;
  			} while (obj = obj.offsetParent);
  			return curtop;
	}
}
				   