/*
 * belk.common.js
 * Belk.com - Common javascript
 * Copyright Belk, Inc.
 */
var belk=window.belk || {};
belk.web=belk.web || {};
belk.web.maintWindow = {
        maintenanceText: "Due to a system upgrade from 7:00-11:30pm EST this evening, belk.com cannot accept your Belk Credit Card for purchases or redeem Belk Rewards Dollars. We apologize for any inconvenience.",
        stopCheckoutTitle: "Belk.com Maintenance",
        stopCheckoutText: "Cannot initiate checkout during the maintenance period.",
        startTime: "Sun, 20 Sep 2009 23:00:00 GMT",
        endTime: "Mon, 21 Sep 2009 03:30:00 GMT"
};
belk.util={
	addValue2DD:function(val,text,ddSelector){
		var elOptNew=document.createElement('option');
		elOptNew.text=text;
		elOptNew.value=val;
		var elSel=$(ddSelector)[0];
		try {
			elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
		}
		catch(ex) {
			elSel.add(elOptNew); // IE only
		}
	},
	clearDD:function(ddSelector){
		$(ddSelector).each(function(){
			while (this.length > 0){
				this.remove(this.length - 1);
			}
		});
	},
	arrayContains:function(array,value){
		var l=array.length;
		var found=false;
		for(var i=0;i<l;i++){
			if(array[i]===value){
				found=true;
				break;
			}
		}
		return found;
	},
	// get query string parameter (url is optional- default is current browser url)
	getQParam:function(key, url){
		return belk.util.getQParams(url)[key];
	},
	// get a "hash table" with the query string parameters (url is optional- default is current browser url)
	getQParams:function(url){
		var args = {};
		var query = null;
		if (url) {
			var tmp = url.split('?');
			if (tmp.length > 1) {
				query = tmp[1];
			}
			else {
				query = url;
			}
		}
		else {
			query = location.search.substring(1);
		}
		var pairs = query.split("&");
		for (var i = 0; i < pairs.length; i++) {
			var pos = pairs[i].indexOf('=');
			if (pos == -1) 
				continue;
			var argname = pairs[i].substring(0, pos);
			var value = pairs[i].substring(pos + 1);
			args[argname] = unescape(value);
		}
		return args;
	},
	createCookie:function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},
	readCookie:function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},
	eraseCookie:function(name) {
		createCookie(name,"",-1);
	},
	// test the passed address to be a valid email address
	isValidEmail:function(address){
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		if(reg.test(address) == false) {
		  return false;
		}
		return true;
	},
	// alert the user about something (errors,etc)
	alert:function(message,title){
		var t = title || 'Alert';
		if($.modal){
			$('<div><div class="hd"><strong>'+t+'</strong></div><div class="bd"><p>'+message+'</p></div><div class="ft"><div class="button action_2"><div class="l"></div><div class="r"></div><div><a class="close_modal default" href="#">OK</a></div></div></div></div>')
				.modal({
					closeClass:'close_modal',
					close:false,
					onShow: function(dialog){
						$('.default',dialog.data).focus();
					},
					containerId:'alert_modal_container'
				});
		}
		else{
			alert(message);
		}
	}
};

belk.web.common={
	init:function(){ 
		/* ahead search words*/

		/*$('form[@name="form_search"] #txt_search_box').autocomplete('/ajax/common/ajaxCall.jsp',{width:292,
			            cacheLength:1,
			            selectFirst:false,
			            minChars:4,
			            scroll:false,
			            extraParams:{ajax_form: 'form_get_ahead_search_words',
						        ahead_searchTerm:function(){return $('form[id="frm_search"] input[name="BELK_ENDECA_SEARCH<>searchTerm"]').val();},
						        ahead_traversedPath:function(){return $('form[id="frm_search"] select[name="BELK_ENDECA_SEARCH<>traversedPath"]').val();},
						        ahead_selDepartment:function(){return $('form[id="frm_search"] select[name="BELK_ENDECA_SEARCH<>traversedPath"] option:selected').text();},
						        ahead_BridalFlag:function(){return $('form[id="frm_search"] input[name="typeAhead_isBridal"]').val();}},
						formatItem: function(data, i, n, value) {
							return "<a href='" + value.split('URL')[0] + "' style='text-decoration:none;'> " + value.split("URL")[1]+ "</a>";
						}
						}).result(function(event,item) {
							var selected = $('div.ac_results li a');
							var _url = ""+item.toString();
								_url = _url.split('URL')[0];
						    location.href = _url;
						});
	
		$('form[@name="form_bridal_search"] #txt_search_box').autocomplete('/ajax/common/ajaxCall.jsp',{width:340,
			            cacheLength:1,
			            selectFirst:false,
			            minChars:4,
			            scroll:false,
			            extraParams:{ajax_form: 'form_get_ahead_search_words',
			                    ahead_searchTerm:function(){return $('form[id="frm_search"] input[name="BELK_ENDECA_SEARCH<>searchTerm"]').val();},
			                    ahead_traversedPath:function(){return $('form[id="frm_search"] select[name="BELK_ENDECA_SEARCH<>traversedPath"]').val();},
			                    ahead_selDepartment:function(){return $('form[id="frm_search"] select[name="BELK_ENDECA_SEARCH<>traversedPath"] option:selected').text();},
			                    ahead_BridalFlag:function(){return $('form[id="frm_search"] input[name="typeAhead_isBridal"]').val();}},
			            formatItem: function(data, i, n, value) {
							return "<a href='" + value.split('URL')[0] + "'style='text-decoration:none;' > " + value.split("URL")[1]+ "</a>";
						}
						}).result(function(event,item) {
							var selected = $('div.ac_results li a');
							var _url = ""+item.toString();
								_url = _url.split('URL')[0];
						    location.href = _url;
						});*/

		
		ezAjax.init(belk.web.config.ajax_methods);
		
		
		//ends here.
		var CMN=belk.web.common;
		CMN._setupButtons();
		CMN.fixIE6Buttons();
		CMN._createNotches();
		CMN.setupLinkDDs();
		CMN._setupDDShoppingBag();
		CMN._setupRecentlyViewed();
		CMN._setupGlobalForms(); // search and buzz
		CMN._setupEmailToFriend();
		CMN._setupLoginModal();
		CMN._textboxDefaultReplace();
		CMN._formValidation();
		CMN._animPromoLine();
		CMN._fixPNG();
		CMN._showPasswordHint();
		CMN._setupPrintPage();
		CMN.setupHoverModals();
		CMN._setupSubNavMoreBrands();
		CMN._setupApplyForBelkCredit();
		CMN._setupTreeNav();
		CMN.setupMaxChars();
		CMN._setupMaintenanceMessage();
		CMN._setupFEImages();
		// TODO
		$('ul.stripeMe').each(function(){
			$("li.row:odd",$(this)).addClass("alt");
		});
		
		$('body').ajaxStart(function(){
			$(this).addClass('wait');
		}).ajaxStop(function(){
			$(this).removeClass('wait');
		});
		
	},
	centerModal:function(sel){
		//center the modal
		var adjScrollTop=$(window).scrollTop();
		var viewportHeight=$(window).height();
		var $modal=$(sel);
		var modalHeight=$modal.height();
		$modal.css('top',adjScrollTop+(viewportHeight-modalHeight)/2);
		
		// add iframe to ie6
		if ($.browser.msie&&$.browser.version=='6.0') {
			$modal.append('<iframe></iframe>');
		}
	},
	
	//Newly Added.

	_setupFEImages:function(){
		$('ul.product_results li a.fc_link').hover(function(){
			var _url = $('img',$(this)).attr('src');
			_url = _url.replace('_off','_on');
			$('img',$(this)).attr({'src':_url});
				},function(){
						var _url = $('img',$(this)).attr('src');
						_url = _url.replace('_on','_off');
						$('img',$(this)).attr({'src':_url});
				});
			},
	
	
	setupHoverModals:function($container){
		$('a.hover_modal_a',$container).hover(
			function(){
				$('#main').css('z-index',3);
				$('div.hover_modal_div',$(this).parent()).show();
			},
			function(){
				$('div.hover_modal_div',$(this).parent()).hide();
				$('#main').css('z-index',1);
			}
		).click(function(ev){ev.preventDefault();});
		
		
		// add iframe to ie6
		if ($.browser.msie&&$.browser.version=='6.0') {
			$('div.hover_modal_div').each(function(){
				$(this).append('<iframe></iframe>');
			});
			
		}
	},
	// private methods
	_setupButtons:function(){
		$('button,div.button').prepend('<div class="l"></div><div class="r"></div>');
	},
	_createNotches:function(){
		$('#search_bar').append('<div class="tl"></div><div class="tr"></div>');
		$('#main').append('<div class="bl"></div><div class="br"></div>');
		$('#signup').append('<div class="bl"></div><div class="tl"></div>');
		$('li.bag').append('<div class="bl"></div><div class="tl"></div><div class="bl"></div><div class="br"></div>');
		$('#dd_shopping_bag div.mn ul.items li').append('<div class="wht_bl"></div><div class="wht_tl"></div><div class="wht_br"></div><div class="wht_tr"></div>');
		$('#wedding_login').append('<div class="wht_bl"></div><div class="wht_tl"></div><div class="wht_br"></div><div class="wht_tr"></div>');
		$('.find_in_store').append('<div class="wht_bl"></div><div class="wht_tl"></div><div class="wht_br"></div><div class="wht_tr"></div>');
		$('.get').append('<div class="wht_bl"></div><div class="wht_tl"></div><div class="wht_br"></div><div class="wht_tr"></div>');
		$('.show').append('<div class="wht_bl"></div><div class="wht_tl"></div><div class="wht_br"></div><div class="wht_tr"></div>');
		$('.bride_block').append('<div class="wht_bl"></div><div class="wht_tl"></div><div class="wht_br"></div><div class="wht_tr"></div>');
		
	},
	setupLinkDDs:function(){
		var zindex=77;
		$('div.linkdd').unbind().hover(
			function(){
				$(this).addClass('active');
			},
			function(){
				$(this).removeClass('active');
			}
		).each(function(){
			$(this).css('z-index',zindex--);
			if ($.browser.msie && $.browser.version == '6.0') {
				if($('li',$(this)).length<10){
					$('ul', $(this)).css('height','auto');
				}
			}
		});
		$('div#filter_viewBy').css('z-index',70);
		$('div#filter_viewBy').unbind().hover(
				function(){
					$(this).addClass('active');
					$(this).css('position','relative');
				},
				function(){
					$(this).css('position','');
					$(this).removeClass('active');
				}
			);
		$('div#filter_viewBy_bottom').css('z-index',70);
		$('div#filter_viewBy_bottom').unbind().hover(
				function(){
					$(this).addClass('active');
					$(this).css('position','relative');
				},
				function(){
					$(this).css('position','');
					$(this).removeClass('active');
				}
			);
	},
	_textboxDefaultReplace:function(){
		/* text box default replace (search, email, etc) */
		var defVals={
			"txt_email_signup":"Enter Email Address",
			"txt_zip_code":"zip code"
		}
		for(var ident in defVals){
			$('#'+ident).focus(function(){
				var $this=$(this);
				if($this.val()==defVals[this.id]){
					$this.val('').one('blur',function(){
						if($this.val()==''){
							$this.val(defVals[this.id]);
						}
					});
				}
			});
		}
	},
	// this is the validation for the email signup
	_formValidation:function(){
		/* email signup form validation */
		$('#frm_email_signup').submit(function(ev){
			if(!belk.util.isValidEmail($('#txt_email_signup').val())){
				ev.stopPropagation();
				belk.util.alert('Please enter a valid email address.', 'Invalid Email Address');
				return false;
			}
		});
	},
	_animPromoLine: function(){
		/* promotion line animation */
		var waitTime=5000;
		var timer;
		var $ul=$('#promo_lines ul');
		if($('li',$ul).length>1){
			/* scrolling... using fade for now
		 var changePromoLine = function(){
		 var $active = $('li.active', $ul);
		 $active.animate({
		 "top": "-1.3em"
		 }, "fast", function(){
		 var $next = $active.next();
		 $active.removeClass('active');
		 if ($next.length < 1) {
		 $next = $('li:first', $ul);
		 }
		 $next.css("top", "1.3em");
		 $next.animate({
		 "top": "0em"
		 }, "fast", function(){
		 $next.addClass('active');
		 timer = setTimeout(changePromoLine, waitTime);
		 });
		 });
		 };*/
			var changePromoLine2 = function(){
				var $active = $('li.active', $ul);
				$active.animate({
					"opacity": "0"
				}, "normal", function(){
					var $next = $active.next();
					$active.removeClass('active');
					if ($next.length < 1) {
						$next = $('li:first', $ul);
					}
					$next.css("top", "0px");
					$next.animate({
						"opacity": "1"
					}, "normal", function(){
						$next.addClass('active');
						timer = setTimeout(changePromoLine2, waitTime);
					});
				});
			};
			timer = setTimeout(changePromoLine2, waitTime);
			$ul.hover(function(){
				clearTimeout(timer);
			}, function(){
				timer = setTimeout(changePromoLine2, waitTime);
			});
		}
	},
	_fixPNG:function(){
		if ($.browser.msie){
			/* Major cleanup/optimization of the code by RLR/Belk
			 *
			 * Correctly handle PNG transparency in Win IE 5.5 & 6.
			 * http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
			 *
			 * Use in <HEAD> with DEFER keyword wrapped in conditional comments:
			 * <!--[if lt IE 7]>
			 * <script defer type="text/javascript" src="pngfix.js"></script>
			 * <![endif]-->
			 */
			var arVersion=navigator.appVersion.split("MSIE");
			var version=parseFloat(arVersion[1]);
			if((version>=5.5)&&(document.body.filters)){
				for(var i=0;i<document.images.length;i++){
					var img=document.images[i];
					var imgName=img.src.toUpperCase();
					if (imgName.substring(imgName.length-3,imgName.length)=="PNG") {
						var imgID=(img.id)?"id='"+img.id+"' ":"";
						var imgClass=(img.className)?"class='"+img.className+"' ":"";
						var imgTitle=(img.title)?"title='"+img.title+"' ":"title='"+ img.alt+"' ";
						var imgStyle="display:inline-block;"+img.style.cssText;
						if (img.align=="left"){
							imgStyle="float:left;"+imgStyle;
						}
						if (img.align == "right") {
							imgStyle="float:right;"+imgStyle;
						}
						if (img.parentElement.href) {
							imgStyle="cursor:hand;"+imgStyle;
						}
						var strNewHTML=["<span ",imgID,imgClass,imgTitle," style=\"","width:",img.width,"px; height:",img.height,"px;",imgStyle,";","filter:progid:DXImageTransform.Microsoft.AlphaImageLoader","(src=\'",img.src,"\', sizingMethod='scale');\"></span>"];
						img.outerHTML=strNewHTML.join('');
						i=i-1;
					}
				}
			}
		}
	},
	_setupDDShoppingBag:function(){
		// add place holder div for the drop down bag
		if (!$('body').is('.shopping_bag')) {
			$('<div id="dd_shopping_bag" style="display:none;"></div>').appendTo('#global_util_nav ul.secondary li.bag');
		}
		
		var ajaxComplete=false;
		belk.web.config.ajax_methods.getCurrentBag.handlers.onComplete=function(){
			belk.web.config.ajax_methods.getCurrentBag.disabled=true;
			ajaxComplete=true;
		};
		var timer=null;
		/*
		$('#global_util_nav ul.secondary li.bag').mouseover(
			function(){
				if(timer){
					clearTimeout(timer);
					timer=null;
				}
			}
		);
		*/
		$('#global_util_nav ul.secondary li.bag').hover(
			function(){
				if(timer){
					clearTimeout(timer);
					timer=null;
				}
			},
			function(ev){
				//if ($(ev.target).is('li.bag')) {
					if (belk.web.config.ajax_methods.getCurrentBag.executing) {
						belk.web.config.ajax_methods.getCurrentBag.cancel = true;
					}
					var timer = setTimeout(function(){
						$('#dd_shopping_bag').slideUp('fast');
						if (!ajaxComplete) {
							belk.web.config.ajax_methods.getCurrentBag.cancel = true;
							ajaxComplete = false;
						}
						belk.web.config.ajax_methods.getCurrentBag.disabled = false;
					}, 200);
				//}
			}
		);
	},
	_setupRecentlyViewed:function(){
		// add place holder div for the drop down recently viewed
		$('<div id="dd_recently_viewed" style="display:none;"></div>').appendTo('#global_util_nav ul.secondary li.recent');
		belk.web.config.ajax_methods.getRecentlyViewed.handlers.onComplete=function(){
			// add iframe to ie6
			if ($.browser.msie&&$.browser.version=='6.0') {
				$('#dd_recently_viewed').append('<iframe></iframe>');
			}
		};
	},
	
	
	
	
	_setupEmailToFriend:function(){
		$('#email_page_to_friend').click(function(){
			$(this).blur();
			$('#modal_email_friend').modal({
				close:false,
				closeClass:'close',
				persist:true,
				containerId:'modal_email_friend_container',
				onClose:function() {
					var $modal = $('#modal_email_friend');
					$('input',$modal).val('');
					$('textarea',$modal).val('I thought you might be interested in this product I found on Belk.com.');
					$('#modal_email_friend span.chars_remaining').html('180');
					$.modal.close();
				}
			});
			return false;
		});
		
		$('<div id="modal_sent_to_friend" class="modal_added" style="display:none;"></div>').appendTo('#page');
		belk.web.config.ajax_methods.emailToFriendSubmit.handlers.onComplete=function(data){
			if (data.success) {
				$.modal.close();
				$('#modal_sent_to_friend').modal({
					close: false,
					closeClass: 'close',
					persist: true,
					containerId: 'modal_added_container'
				});
				var $modal = $('#modal_email_friend');
				$('input',$modal).val('');
				$('textarea',$modal).val('I thought you might be interested in this product I found on Belk.com.');
				$('#modal_email_friend span.chars_remaining').html('180');
			}
		};
	},
	setupMaxChars:function(){
		$('textarea.max_chars').maxChars();
	},
	_setupLoginModal:function(){
		$('#modal_sign_in a.close').click(function(){
			$(this).blur();
			$('#modal_sign_in').fadeOut();
			return false;
		});
	},
	_showPasswordHint:function() {
		$('input#Password').focus(function() {
			$('.hint_password').show();
    	});
	},
	_setupPrintPage:function(){
		$('a.print_page').click(function(){
			$(this).blur();
			window.print();
			return false;
		});
	},
	_setupGlobalForms:function(){
		/*$('#txt_search_box').keydown(function(ev){
			if (ev.keyCode == 13) {
				$('#frm_search button[name="btn_go_search"]').click();
				return false;
			}
		});*/
		$('#frm_search').submit(function(ev){
			var val = $('#txt_search_box').val();
			if(val==null || $.trim(val)=='') {
				ev.preventDefault();
				belk.util.alert('Please enter word(s) to search on.','Required Fields Missing');
				return false;
			}
			return true;
		});
		
		$('#txt_email_signup').keydown(function(ev){
			if (ev.keyCode == 13) {
				$('#frm_email_signup button[name="sign_up"]').click();
				return false;
			}
		});
	},
	_setupSubNavMoreBrands:function(){
		$('#subnav li.more_brands > a').click(function(ev){
			ev.preventDefault();
			var $this=$(this).blur();
			$this.parent().hide();
			$('#subnav ul.more_brands').slideDown();
			return false;
		});
	},
	_setupApplyForBelkCredit:function(){
		$('a.apply_for_credit').removeAttr('target').click(function(ev){
			ev.preventDefault();
			var href=$(this).attr('href');
			var baseUrl = href.split('?')[0];
			var html=['<form method="post" action="',baseUrl,'" target="_blank" style="display:none;">'];
			var qParams = belk.util.getQParams(href);
			$.each(qParams,function(key,val){
				html.push('<input type="hidden" name="',key,'" value="',val,'" />')
			});
			html.push('</form>');
			$(html.join('')).appendTo('body').submit();
			return false;
		});
	},
	fixIE6Buttons:function($container){
		if ($.browser.msie && $.browser.version == '6.0') {
			$('button',$container).each(function(){
				var $this = $(this);
				$this.mousedown(function(){
					$('button').attr('disabled', "disabled");
					$this.addClass('mousedown').removeAttr("disabled");
					$(document).one('mouseup',function(){
						$this.removeClass('mousedown');
					});
					
					setTimeout(function(){
						$('button').removeAttr("disabled");
					},1000);
				});
				
			});
		}
	},
	_setupTreeNav:function(){
		$('#subnav ul.tree_view').each(function(){
			var $this = $(this);
			$('a', $this).click(function(ev){
				var $ul = $('ul:first', $(this).parent()).slideToggle();
				if($ul.length>0){
					ev.preventDefault();
					return false;
				}
				return true;
			});
		});
	},
	_setupMaintenanceMessage:function() {
		//UPDATE THE FOLLOWING VARIABLES FOR THE MAINTENANCE WINDOW
		var maintenanceText = belk.web.maintWindow.maintenanceText;
        var stopCheckoutTitle = belk.web.maintWindow.stopCheckoutTitle;    
		var stopCheckoutText = belk.web.maintWindow.stopCheckoutText;
        var startTime = Date.parse(belk.web.maintWindow.startTime);
        var endTime = Date.parse(belk.web.maintWindow.endTime);    
        
        var currentTime = Date.parse((new Date()).toGMTString()) ;
        var messageStartTime = startTime- (2*3600*1000); //2 hours before maintenance window
		if(maintenanceText.length>0 && messageStartTime<currentTime && endTime>currentTime){
			var style="font-size:13px;font-weight:bold;color:red;text-align:center;text-decoration:blink;";
			var $maintenanceElement = $('#promo');
			if (!$maintenanceElement.length>0){
				$maintenanceElement = $('#step');
				style=style+"margin-bottom:4px;margin-top:-20px;clear:both";
			}
			var elementText = $maintenanceElement.html();
			if (elementText) {
				$maintenanceElement.html('<div style="'+style+'">'+maintenanceText+'</div>'+elementText);
			}
			if (startTime<currentTime && endTime>currentTime) {
				$('form[@name=form_shopping_bag]').submit(function(ev) {
					ev.stopPropagation();
					belk.util.alert(stopCheckoutText,stopCheckoutTitle);
					return false;
				});
			}
		}
	}
};

/* ezAjax object */
var ezAjax={
	ajaxMethods:{},
	init:function(methods,$container){
		jQuery.each(methods,function(key,met){
			var method=met;
			ezAjax.ajaxMethods[key]=method;
			method.outParams={}; // hash map of output params for convenience/performance
			jQuery.each(method.output.params,function(i,param){
				method.outParams[param.name]=param;
			});
			// input handler
			var iH=ezAjax._getInputHandler(method);
			if(method.triggers){
				jQuery.each(method.triggers,function(key,trigger){
					var target=trigger.target;
					
					//if we have a $container then we need to remove the body from the selector if present
					if($container){
						var ind=target.indexOf('body'); // this solution isn't ideal since it will break if body is used in a class or ID
						var ind2;
						while(ind>=0){
							ind2=ind;
							while(target.charAt(ind2++)!=' '){}
							target=target.substring(0,ind)+target.substr(ind2);
							ind=target.indexOf("body");
						}
					}
					
					jQuery(target,$container).bind(trigger.event,iH);
				});
			}
		});
	},
	trigger:function(methodKey){
		(ezAjax._getInputHandler(ezAjax.ajaxMethods[methodKey]))();
	},
	on:function(methodKey,eventName,callback){
		
	},
	_getInputHandler:function(method){
		return function(ev){
			if (!method.executing && method.disabled!=true) {
				var oH=ezAjax._getOutputHandler(method);
				method.executing=true;
				if (this != window) {
					jQuery(this).blur();
				}
				if (!method.handlers.onPreAjax || method.handlers.onPreAjax()) {
					if (method.output.cache && method.output.cachedResp) {
						oH(method.output.cachedResp);
					}
					else {
						var data = [];
						jQuery.each(method.input.params, function(i, param){
							if (param.type == 'fixed') {
								data.push({
									name: param.name,
									value: param.value
								});
							}
							else if (param.type == 'fromDOM') {
								data.push({
									name: param.name,
									value: jQuery(param.value).val()
								});
							}
							else if (param.type == 'selectText') {
								data.push({
									name: param.name,
									value: jQuery(param.value).text()
								});
							}
							else if (param.type == 'fromCurrentForm') {
								var $form=jQuery(ev.target).parent();
								while($form && !$form.is('form')){
									$form=$form.parent();
								}
								if($form){
									data.push({
										name: param.name,
										value: jQuery(param.value,$form).val()
									});
								}
							}
							else if (param.type == 'fromHREF' && ev && ev.target.href) {
								data.push({
									name: param.name,
									value: belk.util.getQParam(param.value, ev.target.href)
								});
							}
							else if (param.type == 'fromID' && ev) {
								data.push({
									name: param.name,
									value: jQuery(ev.target).attr('id')
								});
							}
							else if (param.type == 'fullForm') {
								var t = jQuery(param.value).serializeArray();
								var l = t.length;
								for (var i = 0; i < l; i++) {
									data.push(t[i]);
								}
							}
							else if (param.type == 'fromIDToInput') {
								jQuery(param.to).val(jQuery(ev.target).attr('id'));
							}
										
						});
						//alert('data'+data[1].name+'--'+data[1].value+'--');
						jQuery.ajax({
							type: method.input.method,
							url: method.input.base_url,
							cache: false,
							data: data,
							dataType: method.output.type || 'json',
							success: oH,
							error: function(XMLHttpRequest, textStatus, errorThrown){
								method.executing = false;
								method.cancel = false;
							}
						});
					}
				}
				else{
					method.executing=false;
				}
			}
			if (ev) {
				ev.preventDefault();
				if (ev.type !== 'mouseover') {
					ev.stopPropagation();
				}
			}
		};
	},
	_getOutputHandler:function(method){
		return function(data, textStatus){
			if (method.output.cache) {
				method.output.cachedResp = data;
			}
			var continueExec=true;
			if(method.handlers.onAjaxReturn){
				continueExec=method.handlers.onAjaxReturn(data);
			}
			if (continueExec) {
				if (method.cancel) {
					method.cancel = false;
				}
				else {
					if (method.output.type === 'html') {
						if (data.indexOf('<html') < 0) {
							var $t = jQuery(method.output.target).html(data);
							var anim = 'show';
							$t[anim]();
							jQuery('a.close', $t).click(function(ev){
								$(this).blur();
								var anim = 'hide';
								$t[anim]();
								ev.preventDefault();
							});
						}
						else {
							// reload the page!
							document.location = document.location;
						}
					}
					else { // json
						if (data.success) {
							jQuery.each(data, function(key, val){
								var p = method.outParams[key];
								if (p) {
									var $t = jQuery(p.target).html(val);
									var anim = p.animation || 'show';
									$t[anim]();
									jQuery('a.close', $t).click(function(ev){
										$(this).blur();
										var anim = p.closeAnimation || 'hide';
										$t[anim]();
										ev.preventDefault();
									});
								}
							});
						}
						else{
							if(data.error_code && data.error_code=='ERR_MSG'){
								belk.util.alert(data.message,'Error');
							}
							else if(data.error_code && data.error_code=='ALERT_ERR_MSG'){
								alert(data.message);
							}
						}
					}
					var oC = method.handlers.onComplete;
					if (oC) {
						oC(data);
					}
				}
			}
			method.executing=false;
		};
	}
};

// custom collapsible jquery plugin
jQuery.fn.collapsible=function(options){
	options=jQuery.extend({
		clickSel: "h3",
		collapseSel: ".collapsible_region",
		className: "active",
		mouseActivate: false
	}, options);
	return this.each(function(){
		var $this=$(this);
		$(options.clickSel,$this).click(function(ev) {
			$(this).blur();
			$(options.collapseSel,$this).each(function(){
				$('button',$(this)).hide();
			}).slideToggle(function(){
				$('button',$(this)).show();
			});
			$this.toggleClass(options.className);
			ev.preventDefault();
		});
		if(options.mouseActivate) {
			$(options.clickSel,$this).mouseover(function(){
				$(options.collapseSel,$this).each(function(){
					$('button',$(this)).hide();
				}).slideDown(function(){
					$('button',$(this)).show();
				});
				$this.addClass(options.className);
			});
		}
	});
};

// custom jquery plugin for disbling form field elements
jQuery.fn.disableFormFields=function(){
	return this.each(function(){
		var $this=$(this);
		$('input,select',$this).attr('disabled','disabled');
	});
};
// custom jquery plugin for enabling form field elements
jQuery.fn.enableFormFields=function(){
	return this.each(function(){
		var $this=$(this);
		$('input,select',$this).removeAttr('disabled');
	});
};
// custom jquery plugin for the max/remaining characters functionality
jQuery.fn.maxChars = function(){
	return this.each(function(){
		var $this=$(this);
		var max=parseInt($('span.chars_remaining',$this.parent()).html());
		$('span.chars_remaining',$this.parent()).html(max-$this.val().length)
		
		$this.keyup(function(){
			// update chars remaining
			var $this=$(this);
			if($this.val().length>max){
				$this.val($this.val().substring(0,max));
			}
			$('span.chars_remaining',$this.parent()).html(max-$this.val().length||'0');
		}).keydown(function(ev){
			// check max chars
			var $this=$(this);
			if($this.val().length>=max && ev.keyCode!==8 && ev.keyCode!==46){
				if($this.val().length>max){
					$this.val($this.val().substring(0,max-1));
				}
				return false;
			}
			return true;
		});
	});
};
// add a selector to jQuery
jQuery.extend(jQuery.expr[":"], {
  textEquals: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"")==m[3]}
});

//dom is ready...
$(document).ready(belk.web.common.init);
