function init_comments() {
	if (!$("#comments").length)
		return;
	$("#comments").init_bbcode({
			form_name: 'COMMENTS_FORM', 
			text_name: 'DATA[COMMENT]',
			bbcode_buttons:	'.insert_bbcode'
	});
	$(".s-msg-reply").click(function(){
		var parent = $(this).parents("div.info").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#COMMENT").html('[quote=' + $("#AUTHOR_" + $(parent).attr("id")).text() + ']' + $("#SOURCE_" + $(parent).attr("id")).text() + '[/quote]');
		$("#comment_PARENT_ID").attr("value", $("#ID_" + $(parent).attr("id")).text());
		$("#comment_LEVEL").attr("value", parseInt($("#LEVEL_" + $(parent).attr("id")).text() + 1));
		$("#comment_PARENT_ID").removeAttr("disabled");
		$("#comment_LEVEL").removeAttr("disabled");
		$("#form-comment-add").insertAfter('#comment' + $("#ID_" + $(parent).attr("id")).text());
		$(".s-msg-reply, .s-msg-add, .s-msg-top").hide();
		$("#form-comment-add").show();
		return false;
	});
	
	$(".s-msg-add").click(function(){
		$("#comment_PARENT_ID").attr("disabled", "disabled");
		$("#comment_LEVEL").attr("disabled", "disabled");
		$("#comment_PARENT_ID").attr("value", "");
		$("#comment_LEVEL").attr("value", "");
		$("#COMMENT").html("");
		$("#form-comment-add").insertAfter('#comments_form_start_position');
		$(".s-msg-reply, .s-msg-add, .s-msg-top").hide();
		$("#form-comment-add").show();
		return false;
	});
	$(".s-msg-cancel").click(function(){
		$("#comment_PARENT_ID").attr("disabled", "disabled");
		$("#comment_LEVEL").attr("disabled", "disabled");
		$("#comment_PARENT_ID").attr("value", "");
		$("#comment_LEVEL").attr("value", "");
		$("#COMMENT").html("");
		$("#form-comment-add").hide();
		$("#form-comment-add").insertAfter('#comments_form_start_position');
		$(".s-msg-reply, .s-msg-add, .s-msg-top").show();
		return false;
	});
}

function init_lightbox() {
	if ($("a.lightbox_single").length)
		$.each($("a.lightbox_single"),function(i,obj){
				$(obj).lightBox();
		});
	if ($(".lightbox").length)
		$(".lightbox").lightBox();
}

function init_after_login_return() {
	$('.after_login_return').click(function() {
		//alert("You should login");
		setCookie('after_login_return_url',document.location.href,'','/');
		//location.href="/login/";
	});
}

function init_after_logout_return() {
	$('.after_logout_return').click(function() {
		//alert("You should login");
		setCookie('after_logout_return_url',document.location.href,'','/');
		//location.href="/login/";
	});
	$('.after_logout_return2home').click(function() {
		//alert("You should login");
		setCookie('after_logout_return_url',$("SPAN#SITEHOME").text(),'','/');
		//location.href="/login/";
	});
}

function init_non_auth_message() {
	$(".non_auth").click(function(){
		alert($(this).attr("title"));
		location.href = $(this).attr("href");
	});
}

function init_confirmations() {
	$(".confirmation").dialog({
		bgiframe: true,
		resizable: false,
		height: 350,
		autoOpen: false,
		modal: true,
		overlay: {
			backgroundColor: '#000',
			opacity: 0.5
		},
		buttons: {
			'I agree to terms and conditions': function() {
				$("#" + $(this).attr("rel")).attr('checked','checked');
				$(this).dialog('close');
			},
			Cancel: function() {
				$("#" + $(this).attr("rel")).removeAttr('checked');
				$(this).dialog('close');
			}
		}
	});
	$(".open_confirmation")
		.css({'cursor':'pointer'})
		.click(function() {
			$("#" + $(this).attr("rel")).dialog('open');
			return false;
		});
}

function init_msgbox() {
	$(".msgBox").each(function(i,obj){
		var height_val = $(obj).attr('height')?$(obj).attr('height'):350;
		var width_val = $(obj).attr('width')?$(obj).attr('width'):600;
		$(obj).dialog({
			height: height_val * 1,
			width: width_val * 1,
		autoOpen: false
	});
	});
	$(".open_msgBox")
		.css({'cursor':'pointer'})
		.click(function() {
			$("#" + $(this).attr("rel")).dialog('open');
			return false;
		});
}

function init_on_focus_replace() {
	$.each($('.on_focus_replace'),function(i,obj){
		if(!$(obj).attr('title').length && $(obj).attr('value').length)
			$(obj).attr('title',$(obj).attr('value'));
		if(!$(obj).attr('value').length)
			$(obj).attr('value',$(obj).attr('title'));
	});		
	$('.on_focus_replace')
		.focus(function() {
			$(this).attr('value',($(this).attr('value')==$(this).attr('title')?'':$(this).attr('value')));
		})
		.blur(function() {
			$(this).attr('value',($(this).attr('value')==''?$(this).attr('title'):$(this).attr('value')));
		});
	$.each($('input.on_focus_replace'),function(i,obj){
		$(obj).attr('value',($(obj).attr('value')==''?$(obj).attr('title'):$(obj).attr('value')));
	});
		
}

function init_fading_tabs() {
	if (!$('.tabs_listing').length)
		return;
	$.each($('.tabs_listing'),function(i,obj){
		$(obj).innerfade({
			speed: 2000, //tabs switching speed in milliseconds
			timeout: 4000, //timeout between switching on next tab in milliseconds
			containerheight: $(obj).css("height"), //tabs container height (important for absolute positioned containers)
			el: i //the key in the Buffer array for this tabs set
		});
	});

}

function correct_zindex4menu(selector4_zindex_correction){
	$(selector4_zindex_correction).css({'z-index':'20'});
	$(selector4_zindex_correction +' li').css({'z-index':'20'});
	$(selector4_zindex_correction +' li ul').css({'z-index':'30'});
	$(selector4_zindex_correction +' li ul li').css({'z-index':'30'});
}


function get_parent_div_of_class(element, class_name){
	while ($(element).parent().length){
		element = $(element).parent();
		if ($(element).hasClass(class_name))
			break;
	}
	/*while(pp = $(element).parent().length){
		
	}*/
	return element;
}



/////////////////////////////////////
///Mandatory fields validation
////////////////////////////////////


function luhn_check(number) {
	if (number=='4222222222222222') //Work around for Auth.net test card
      	return true;

  // Strip any non-digits (useful for credit card numbers with spaces and hyphens)
  var number=number.replace(/\D/g, '');
 
  // Set the string length and parity
  var number_length=number.length;
  var parity=number_length % 2;
 
  // Loop through each digit and do the maths
  var total=0;
  for (i=0; i < number_length; i++) {
    var digit=number.charAt(i);
    // Multiply alternate digits by two
    if (i % 2 == parity) {
      digit=digit * 2;
      // If the sum is two digits, add them together (in effect)
      if (digit > 9) {
        digit=digit - 9;
      }
    }
    // Total up the digits
    total = total + parseInt(digit);
  }
 
  // If the total mod 10 equals 0, the number is valid
  if (total % 10 == 0) {
    return true;
  } else {
    return false;
  }
}


function isValidCreditCard(type, ccnum) {
	if (!type)
		type = 'VISA';
	re = '';
   if (type == "VISA") {
   		if (ccnum=='4222222222222222') //Work around for Auth.net test card
      		return true;
      // Visa: length 16, prefix 4, dashes optional.
      var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "MASTERCARD") {
      // Mastercard: length 16, prefix 51-55, dashes optional.
      var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "ISRACARD") {
      // Isracard: length 8-9, no known prefix, dashes optional.
      var re = /^\d{0,1}-?\d{4}-?\d{4}$/;
   } else if (type == "DISCOVER") {
      // Discover: length 16, prefix 6011, dashes optional.
      var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
   } else if (type == "AMEX") {
      // American Express: length 15, prefix 34 or 37.
      var re = /^3[4,7]\d{13}$/;
   } else if (type == "DINERS") {
      // Diners: length 14, prefix 30, 36, or 38.
      var re = /^3[0,6,8]\d{12}$/;
   } else if (type == "JCB") {
      // JCB: length 16, prefix 35 , dashes optional.
      var re = /^35-?\d{4}-?\d{4}-?\d{4}$/;;
   }
   if (re=='' || ccnum=='')
   		 return false;
   if (!re.test(ccnum)) return false;
   if (type == "ISRACARD")
   		return true;
   // Remove all dashes for the checksum checks to eliminate negative numbers
   ccnum = ccnum.split("-").join("");
   // Checksum ("Mod 10")
   // Add even digits in even length strings or odd digits in odd length strings.
   var checksum = 0;
   for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
      checksum += parseInt(ccnum.charAt(i-1));
   }
   
   // Analyze odd digits in even length strings or even digits in odd length strings.
   for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
      var digit = parseInt(ccnum.charAt(i-1)) * 2;
      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
   }
   if ((checksum % 10) == 0) return true; else return false;
}


function validate_any_form(frm){
	
		$(frm).find("INPUT, SELECT, TEXTAREA, LABEL").removeClass('mandatory_selected');
		$(frm).find("DIV.form_err_message").hide();
		$(frm).find("DIV.form_err_message DIV.checkbox_mandatory_error").hide();
		
		$("INPUT[name='FORM_VALIDATOR']").addClass('mandatory');
		
		var msg = '';
			

		if ($(frm).find("INPUT.mail, INPUT#EMAIL").length){
			email_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

			$(frm).find("INPUT.mail, INPUT#EMAIL").each(function(){
				if(($(this).attr('value')!='')&& !email_filter.test($(this).attr('value'))){
					$(this).addClass('mandatory_selected');
					if (msg=='')
						msg = 'Entered e-mail is wrong';
				}
			});
		}

		$(frm).find("DIV.form_err_message SPAN.form_email_error").hide();
		if (msg!='')
			$(frm).find("DIV.form_err_message SPAN.form_email_error").show();
		

		$(frm).find("DIV.form_err_message SPAN.form_currency_error").hide();	
		$(frm).find("INPUT.currency").each(function(){
			
			if(($(this).attr('value')!='') && (Number($(this).attr('value')).toFixed(2) != $(this).attr('value'))){
				//alert(Number($(this).attr('value')).toFixed(2) + ':' + $(this).attr('value'));
				$(this).addClass('mandatory_selected');
				if (msg!='') msg+="\n<br>";
					msg+= 'Wrong number format for currency field';
				$(this.form).find("DIV.form_err_message SPAN.form_currency_error").show();
			}
		});
		

		$(frm).find("DIV.form_err_message SPAN.form_password_error").hide();		
		$(frm).find("DIV.form_err_message SPAN.form_mandatory_error").hide();		
		$(frm).find("DIV.form_err_message SPAN.form_cc_error").hide();		
		
		if (($(frm).find("INPUT[TYPE=password]").length>1) &&
			$(frm).find("INPUT#PASSWORD1").length &&
			$(frm).find("INPUT#PASSWORD2").length &&
			($(frm).find("INPUT#PASSWORD1").attr('value') != $(frm).find("INPUT#PASSWORD2").attr('value'))
		){

			$(frm).find("INPUT#PASSWORD1").addClass('mandatory_selected');
			$(frm).find("INPUT#PASSWORD2").addClass('mandatory_selected');
			$(frm).find("DIV.form_err_message SPAN.form_password_error").show();
			if (msg) msg+='<br>';
			msg+= 'Passwords do not match, please try again...';
		}
		
		var checkbox_mandatory_error = '';
		var checkbox_mandatory_selected = false;
		$(frm).find("INPUT[TYPE=checkbox].mandatory").each(function(i,obj){
			if(!$(obj).attr('checked')) {
				$(obj).addClass('mandatory_selected');
				$('LABEL[FOR=' + $(obj).attr("id") + ']').addClass('mandatory_selected');
				if ($(obj).attr("title")!='') {
					if (checkbox_mandatory_error) checkbox_mandatory_error+='<br>';
					if (msg) msg+='<br>';
					msg+= checkbox_mandatory_error+= $(obj).attr("title");
				} else {
					checkbox_mandatory_selected = true;
				}
			}
		});
		if (checkbox_mandatory_error.length > 0) {
			if (!$(frm).find("DIV.form_err_message DIV.checkbox_mandatory_error").length)
				$(frm).find("DIV.form_err_message").prepend('<div class="checkbox_mandatory_error"></div>')
			$(frm).find("DIV.form_err_message DIV.checkbox_mandatory_error").html(checkbox_mandatory_error).show();
			$(frm).find("DIV.form_err_message").show();
		}

		if ($(frm).find("INPUT.mandatory[value=''], SELECT.mandatory[value=''], TEXTAREA.mandatory[value='']").length || checkbox_mandatory_selected){
			if (msg) msg+='<br>';
			msg+= 'Please fill up missing fields below';
			$(frm).find("DIV.form_err_message SPAN.form_mandatory_error").show();
		}
		if ($(frm).find("INPUT.mandatory.on_focus_replace, TEXTAREA.mandatory.on_focus_replace").length){
			var err_on_focus_replace = false;
			$(frm).find("INPUT.mandatory.on_focus_replace, TEXTAREA.mandatory.on_focus_replace").each(function(i,obj){
				if($(obj).attr("value") == $(obj).attr("title")) {
					err_on_focus_replace = true;
					$(obj).addClass("mandatory_selected");
				}
			});
			if (err_on_focus_replace) {
				if (msg) msg+='<br>';
				msg+= 'Please fill up missing fields below';
				$(frm).find("DIV.form_err_message SPAN.form_mandatory_error").show();
			}
		}
		if ($(frm).find("INPUT#CC_NUMBER").length && $(frm).find("#CC_TYPE").length &&
			$(frm).find("INPUT#CC_NUMBER").hasClass('mandatory')){
			
			
			$(frm).find("DIV.form_err_message SPAN.form_cc_error").hide();
			cc_v = $(frm).find("INPUT.mandatory#CC_NUMBER").attr('value');
			cc_t = $(frm).find("#CC_TYPE").attr('value');
			if (!isValidCreditCard(cc_t, cc_v) || (cc_t!='ISRACARD' && !luhn_check(cc_v))){
				if (msg) msg+='<br>';
				msg+=' Credit Card is invalid';
				$(frm).find("DIV.form_err_message SPAN.form_cc_error").show();
				$(frm).find("INPUT.mandatory#CC_NUMBER").addClass('mandatory_selected');
			}
		
			
		}
	
		
		if (msg=='')
			return true;
		$(frm).find("INPUT.mandatory[value=''], SELECT.mandatory[value=''], TEXTAREA.mandatory[value='']").addClass('mandatory_selected');
		$(frm).find(".mandatory_selected:first").focus();
		if (!$(frm).find("DIV.form_err_message").length){
			$(frm).prepend('<div class="form_err_message error_mesage">'+msg+'</div>');
		}
		$(frm).find("DIV.form_err_message").show();
		if ($(frm).find("DIV.form_err_message").html()=='')
			$(frm).find("DIV.form_err_message").html(msg);

		return false;
}

function init_form_validation(){
	
	if (!$("FORM:has(INPUT.mandatory)").length)
		return;
	$("INPUT.currency").blur(function(){
		if (($(this).attr('value') != '') && (Number($(this).attr('value')).toFixed(2)!='0.00') && (Number($(this).attr('value')).toFixed(2)!='NaN'))
			$(this).attr('value', Number($(this).attr('value')).toFixed(2));
	});

	$("FORM:has(INPUT.mandatory), FORM:has(SELECT.mandatory), FORM:has(TEXTAREA.mandatory)").submit(function(){
		return validate_any_form(this);
	});
	$("TD.form_title + TD.form_field:has(INPUT.mandatory)").prev().find("SPAN").text('*').css('color','red');
	$("TD.form_title + :not(TD.form_field:has(INPUT.mandatory))").prev().find("SPAN").html('&nbsp; ').css('padding-left','2px');
}


/******* DIALOG RELATED ****************/

function updateTips(t) {
	tips.text(t).effect("highlight",{},1500);
}

		

function checkLength(o,n,min,max) {
	if ( o.val().length > max || o.val().length < min ) {
		o.addClass('ui-state-error');
		updateTips("Length of " + n + " must be between "+min+" and "+max+".");
		return false;
	}
	return true;
}

function checkRegexp(o,regexp,n) {
	if ( !( regexp.test( o.val() ) ) ) {
		o.addClass('ui-state-error');
		updateTips(n);
		return false;
	}
	return true;
}

function init_form_dialog(){

	if ($('.deal_login_dialog_open').length){
			$('.deal_login_dialog_open').click(function() {
				alert("You should login to post your offer!");
				setCookie('after_login_return_url',document.location.href,'','/');
				location.href="/login/";
			});
		return;
	}
	
	if (!$('#offer_dialog').length || !$('.deal_dialog_open').length)
		return;
	
	var name = $("#dialog_author"),
		email = $("#dialog_email"),
		password = $("#dialog_text"),
		allFields = $([]).add(name).add(email).add(password),
		tips = $("#validateTips");
			
	$("#offer_dialog").dialog({
		bgiframe: true,
		autoOpen: false,
		height: 400,
		modal: true,
		buttons: {
			'Submit': function() {
				var bValid = true;
				allFields.removeClass('ui-state-error');

				bValid = bValid && checkLength(name,"Name",3,50);
				bValid = bValid && checkLength(email,"Email",6,80);
				bValid = bValid && checkLength(password,"Details",5,255);

				//bValid = bValid && checkRegexp(name,/^[a-z]([0-9a-z_])+$/i,"Username may consist of a-z, 0-9, underscores, begin with a letter.");
				// From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
				bValid = bValid && checkRegexp(email,/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,"eg. info@bankingconnects.com ");
				/*" ))))*/
				//bValid = bValid && checkRegexp(password,/^([0-9a-zA-Z])+$/,"Password field only allow : a-z 0-9");
			
				if (bValid) {
					$("#SENDER_NAME").attr("value", $("#dialog_author").attr("value"));
					$("#SENDER_EMAIL").attr("value", $("#dialog_email").attr("value"));
					$("#COMMENTS").html($("#dialog_text").attr("value"));
					$(this).dialog('close');
					$("#post_offer").submit();
				}
			},
			Cancel: function() {
				$(this).dialog('close');
			}
		},
		close: function() {
			allFields.val('').removeClass('ui-state-error');
		}
	});
		
	$('.deal_dialog_open').click(function() {
		var deal_id = $(this).attr("rel");
		$("#SRC_TAG").attr("value", $("#deal_tag_" + deal_id).text());
		$("#SRC_ID").attr("value", $("#deal_id_" + deal_id).text());
		$("#AUTHOR_EMAIL").attr("value", $("#deal_email_" + deal_id).text());
		$("#dialog_author").attr("value", $("#CURRENT_USER_NAME").text());
		$("#dialog_email").attr("value", $("#CURRENT_USER_EMAIL").text());
		$('#offer_dialog').dialog('open');
	});

}



function init_mega_menu(){
	var mega_menu_Config = {    
     interval: 100,
     timeout: 100,
     sensitivity: 4,
     over: function () {$(this).addClass("hovering");},
     out: function (){ $(this).removeClass("hovering");}
	}
	$('UL.mega_menu LI').hoverIntent(mega_menu_Config);
}

function init_calendar_selectors(){
	
	if (!$('#calendar_month').length)
		return;	
	if (!$('#calendar_month_selector').length)
		return;
	if (!$('#calendar_year').length)
		return;	
	if (!$('#calendar_year_selector').length)
		return;
		
	$('#calendar_month_selector_close').click(function(){
		$('#calendar_month_selector').hide();
	});
	
	$('#calendar_year_selector_close').click(function(){
		$('#calendar_year_selector').hide();
	});

	$('#calendar_month').click(function (e){
		el = $('#calendar_month_selector');
		el.css('position', 'absolute');
		el.css('left', $(this).offset().left);
		el.css('top', e.pageY - el.height()/2);
		el.show();
	})
	$('#calendar_year').click(function (e){
		el = $('#calendar_year_selector');
		el.css('position', 'absolute');
		el.css('left', $(this).offset().left);
		el.css('top', e.pageY - el.height()/2);
		el.show();
	})
}

function init_categories_index_list() {
	if (!$('div.box_in').length && !$('div.box_in_supplies').length)
		return;
	//if (typeof(serialScroll) != "undefined") {
		jQuery.easing.easeOutQuart = function (x, t, b, c, d) {
			return -c * ((t=t/d-1)*t*t*t - 1) + b;
		};
		jQuery(function( $ ){
			$('div.box_in').serialScroll({
				//target:'.gallery_full_list',
				items:'li', // Selector to the items ( relative to the matched elements, '#sections' in this case )
				prev:'#categories_index_prev',// Selector to the 'prev' button (absolute!, meaning it's relative to the document)
				next:'#categories_index_next',// Selector to the 'next' button (absolute too)
				axis:'x',// The default is 'y' scroll on both ways
				//navigation:'#greybox_m img.nav_first, #navigation_hidden a, #greybox_m img.nav_last',
				duration:500,// Length of the animation (if you scroll 2 axes and use queue, then each axis take half this time)
				force:true, // Force a scroll to the element specified by 'start' (some browsers don't reset on refreshes)
				cycle:false, //don't pull back once you reach the end
				//queue:false,// We scroll on both axes, scroll both at the same time.
				//event:'click',// On which event to react (click is the default, you probably won't need to specify it)
				//stop:false,// Each click will stop any previous animations of the target. (false by default)
				//lock:true, // Ignore events if already animating (true by default)		
				//start: 0, // On which element (index) to begin ( 0 is the default, redundant in this case )
				exclude:3,//Exclude n elements before end		
				//cycle:true,// Cycle endlessly ( constant velocity, true is the default )
				step:4, // How many items to scroll each time ( 1 is the default, no need to specify )
				//jump:false, // If true, items become clickable (or w/e 'event' is, and when activated, the pane scrolls to them)
				//lazy:false,// (default) if true, the plugin looks for the items on each event(allows AJAX or JS content, or reordering)
				//interval:1000, // It's the number of milliseconds to automatically go to the next
				//constant:true, // constant speed
				
				onBefore:function( e, elem, $pane, $items, pos ){
					 //those arguments with a $ are jqueryfied, elem isn't.
					e.preventDefault();
					if( this.blur )
						this.blur();
				},
				onAfter:function( elem ){
					//'this' is the element being scrolled ($pane) not jqueryfied
				}
			});
			$('div.box_in_supplies').serialScroll({
				items:'li', // Selector to the items ( relative to the matched elements, '#sections' in this case )
				prev:'#categories_index_prev',// Selector to the 'prev' button (absolute!, meaning it's relative to the document)
				next:'#categories_index_next',// Selector to the 'next' button (absolute too)
				axis:'x',// The default is 'y' scroll on both ways
				duration:600,// Length of the animation (if you scroll 2 axes and use queue, then each axis take half this time)
				force:true, // Force a scroll to the element specified by 'start' (some browsers don't reset on refreshes)
				cycle:false, //don't pull back once you reach the end
				exclude:2,//Exclude n elements before end		
				step:1, // How many items to scroll each time ( 1 is the default, no need to specify )
				onBefore:function( e, elem, $pane, $items, pos ){
					 //those arguments with a $ are jqueryfied, elem isn't.
					e.preventDefault();
					if( this.blur )
						this.blur();
				},
				onAfter:function( elem ){
					//'this' is the element being scrolled ($pane) not jqueryfied
				}
			});
		});
	//}
}

function init_date_pickers(){
	//alert($(".date_picker").eq(0).attr('value'));
	$(".date_picker").datepicker({showOn: 'button', buttonImage: 'img/show-calendar.gif', buttonImageOnly: true});
	
}

function copy_paypal_email(){
	if (!$('#PAYPAL_SAMEAS_BILL').attr('checked'))
		return;
	if (!$('#PAY_PAL_EMAIL').length)
		return;
	if (!$('FORM#checkout_form #EMAIL').length){
			alert('Can not find source EMAIL field');
			return false;
	}
	$('#PAY_PAL_EMAIL').attr('value', $('FORM#checkout_form #EMAIL').attr('value'));
}


function use_billing_data4shipping(){
	if (!$('FORM#checkout_form #copydata').length)
		return false;
	if (!$('FORM#checkout_form #copydata').attr('checked'))
		return false;
	return true;
}

function copy_shipping_data(){
	if (!use_billing_data4shipping())
		return false;
	
	$('FORM#checkout_form .form_block#billing').find('INPUT, SELECT, TEXTAREA').each(function(){
		if ($('FORM#checkout_form #SHIP' +  $(this).attr('ID')).length)
			$('FORM#checkout_form #SHIP' +  $(this).attr('ID')).attr('value', $(this).attr('value'));
	});
	$('FORM#checkout_form #SHIPEMAIL').attr('value', $('FORM#checkout_form #EMAIL').attr('value'));
	return true;
}


function get_shipping_data(){
	if (!$('FORM#checkout_form #delivery').length)
		return;
	prefix = use_billing_data4shipping()?'':'SHIP';
	country_value = 'US';
	zip_value = '';
	
	if ($('FORM#checkout_form #'+prefix+'COUNTRY').length)
		country_value = $('FORM#checkout_form #'+prefix+'COUNTRY').attr('value');
	if ($('FORM#checkout_form #'+prefix+'ZIPCODE').length)	
		zip_value = $('FORM#checkout_form #'+prefix+'ZIPCODE').attr('value');
	
	if (country_value=='USA')
		country_value = 'US';
	if ((country_value!='US') && (country_value!='CA') && (country_value!='UK'))
		country_value = 'INT';
	if (typeof(region_visual_settings[country_value])=='undefined')
		country_value = 'INT';
	if (typeof(region_visual_settings[country_value])=='undefined')
		country_value = 'US';
	if (typeof(region_visual_settings[country_value])=='undefined'){
		alert('Error: shipping setting for country '+ country_value + ' is not found');
		return;
	}
		

	if (region_visual_settings[country_value+'_is_gateway']!='0')
		$('FORM#checkout_form #RESIDENTIAL_SELECTION_BLOCK').show();
	else
		$('FORM#checkout_form #RESIDENTIAL_SELECTION_BLOCK').hide();
	
	if (region_visual_settings[country_value+'_is_breaks']!='0'){
		$('FORM#checkout_form #delivery').hide();
		$('FORM#checkout_form #DELIVERY_BLOCK_TITLE').hide();
	}
	else{
		$('FORM#checkout_form #delivery').show();
		$('FORM#checkout_form #DELIVERY_BLOCK_TITLE').show();
		if (zip_value!=''){
			settings_id = region_visual_settings[country_value];
			is_res = '';
			if ($('FORM#checkout_form #RESIDENTIAL').length && $('FORM#checkout_form #RESIDENTIAL').attr('checked'))
				is_res = '1';
			$('FORM#checkout_form #SHIPPING_METHOD').hide();
			$('FORM#checkout_form #SHIPPING_DEFAULT_STATUS_TEXT').hide();
			$('FORM#checkout_form #SHIPPING_CALCULATING_STATUS_TEXT').show();
			selected = '';
			$.get(sitehome_secure+'?section=plain_list&ac=shipping_choices_result&MODULE_PARAMS=SS_ID%3D'+settings_id+'%26ENTIRE_LIST_TEMPLATE%3Dcheckout_shipping_list.html%26ITEM_TEMPLATE%3Dcheckout_shipping_item.html%26PAGE_IDX%3D0%26WHERE%3D%26NUMONPAGE%3D100&params[ZIP]='+
		     zip_value + '&params[COUNTRY]='+ country_value + '&params[RESIDENTIAL]='+ is_res+'&'+Math.random()+selected, 
				function(data) {
					$('FORM#checkout_form #SHIPPING_METHOD').html(data);
					$('FORM#checkout_form #SHIPPING_CALCULATING_STATUS_TEXT').hide();
					$('FORM#checkout_form #SHIPPING_METHOD').show();
				});

			
		}
	}
	
	
}

function init_country_state_block(prefix){
	var class_prefix;
	class_prefix = prefix != ''?prefix.toLowerCase()+'_':'';
	if ($('FORM #'+prefix+'COUNTRY').length != 1)
		return ;
	$('FORM #'+prefix+'COUNTRY').change(function(){
		$('.'+class_prefix+'state').hide().removeClass('mandatory').removeClass('mandatory_selected').attr('disabled', true);
		$('.'+class_prefix+'state_caption').hide();
		if ($('#'+prefix+'STATE_'+$(this).attr('value')).length){
			$('#'+prefix+'STATE_'+$(this).attr('value')).addClass('mandatory').show().attr('disabled', false);
			$('#'+prefix+'STATE_CAPTION_'+$(this).attr('value')).show();
		}
		else
		if ($('#'+prefix+'ALT_STATE').length){
			$('#'+prefix+'ALT_STATE').show().attr('disabled', false);
			$('#'+prefix+'STATE_CAPTION_ALT').show();
		}
	});
	$('FORM #'+prefix+'COUNTRY').change();
}

function set_non_mandatory_fields_behavior(condition, $parent, add_selector) {
	if(condition)
		$parent.find('INPUT' + add_selector + ', SELECT' + add_selector + ', TEXTAREA' + add_selector).removeClass('mandatory');
	else
		$parent.find('INPUT' + add_selector + ', SELECT' + add_selector + ', TEXTAREA' + add_selector).addClass('mandatory');
}

function init_checkout_form(){
	if (!$('FORM#checkout_form').length)
		return;

	$('FORM#checkout_form').submit(function(){
		copy_paypal_email();
		if (!copy_shipping_data()){
			if($('FORM#checkout_form A#shipping_link').hasClass('closed'))
				$('FORM#checkout_form A#shipping_link').click();
		}
	});
	
	//Blocks opening and closing
	$('FORM#checkout_form DIV.title_background_checkout A:not(FORM#checkout_form DIV.title_background_checkout A.menu)').click(function(){
		if ($(this).attr('href')=='')
			return false;	
		$(this).toggleClass('closed');
		$('#'+$(this).attr('href')).toggleClass('form_block_hidden');
		if ($(this).attr('href')!='shipping')
			return false;

		if (!$(this).hasClass('closed'))
			$('FORM#checkout_form #copydata').attr('checked', false);

		set_non_mandatory_fields_behavior($('FORM#checkout_form #copydata').attr('checked'), $('#' + $(this).attr('href')), '.non_mandatory');
		return false;
	});
	
	$('FORM#checkout_form DIV.title_background_checkout A.menu').click(function(){
		$('#PMETHOD').attr('value', $(this).attr('ID'));
		$('FORM#checkout_form DIV.title_background_checkout A.menu').removeClass('menu_opened');
		$(this).addClass('menu_opened');
		$('FORM#checkout_form DIV.payment_method').hide();
		$('FORM#checkout_form DIV.payment_method .mandatory').removeClass('mandatory');
		$('#'+$(this).attr('href')).show();
		set_non_mandatory_fields_behavior(false, $('#'+$(this).attr('href')), '.non_mandatory');
		var $block = $('FORM#checkout_form A.'+$(this).attr('href') + '_block');
		if ($block.length){
			if ($block.hasClass('closed'))
				$block.click();
		}
		$.each($('FORM#checkout_form DIV.title_background_checkout A.menu'),function(i,obj){
			var $fields = $('FORM#checkout_form DIV.'+$(obj).attr('href') + '_fields');
			if ($fields.length){
				set_non_mandatory_fields_behavior(!$(obj).hasClass('menu_opened'), $fields, '');
			}
		});
		return false;
	});
	
	if ($('FORM#checkout_form #COUNTRY').length || $('FORM#checkout_form #SHIPCOUNTRY').length)
			get_shipping_data();
	
	while ($('FORM#checkout_form #PMETHOD').length){
		tmp_id = $('FORM#checkout_form #PMETHOD').attr('value');
		if ((tmp_id!='') && $('#' + tmp_id).length){
			$('#' + tmp_id).click();
			break;
		}
		$($('FORM#checkout_form DIV.title_background_checkout A.menu').get(0)).click();
		break;
		
	}
	
	
	$('FORM#checkout_form #PAYPAL_SAMEAS_BILL').click(function(){
		copy_paypal_email();
	});
	
	$('FORM#checkout_form #ZIPCODE').blur(function(){
		if (use_billing_data4shipping())
			get_shipping_data();
	});
	
	$('FORM#checkout_form #SHIPZIPCODE').blur(function(){
		if (!use_billing_data4shipping())
			get_shipping_data();
	});
	
	$('FORM#checkout_form #RESIDENTIAL').click(get_shipping_data);
	
	$('FORM#checkout_form #copydata').click(function(){
		tmp= $('FORM#checkout_form A#shipping_link');
		if (!tmp.length)
			return;
		if (copy_shipping_data()){
			$('#'+tmp.attr('href')).find('INPUT.non_mandatory, SELECT.non_mandatory, TEXTAREA.non_mandatory').removeClass('mandatory').removeClass('mandatory_selected');
			return;
		}
		if (tmp.hasClass('closed'))
			tmp.click();
		$('#'+tmp.attr('href')).find('INPUT.non_mandatory, SELECT.non_mandatory, TEXTAREA.non_mandatory').addClass('mandatory');
	});
	
	
	$('FORM#checkout_form #change_cc').click(function(){
		$('FORM#checkout_form #cc_number_star').hide();
		$('FORM#checkout_form #cvv_star').hide();
		$(this).hide();
		$('FORM#checkout_form #CC_NUMBER').addClass('non_mandatory').addClass('mandatory').attr('disabled', false).show();
		$('FORM#checkout_form #CVV').addClass('non_mandatory').addClass('mandatory').attr('disabled', false).show();
		return false;
	})
	
	
	
}
function init_dialog() {
	if (!$('#quote-dialog-form').length)
		return;
	$('#quote-dialog-form').hide();
	$('#quote-dialog-form').find('INPUT[type=submit]').hide();
	$('#quote-dialog-form').find('INPUT[type=image]').hide();
	
	$('.open-quote-dialog-form').click(function() {
		$('#quote-dialog-form').dialog('open');
		return false;
	});
	
	$('#quote-dialog-form').each(function(){
		if ($(this).attr('ID') == ''){
			alert('Form error! Div with class .contact_from_popup should have an ID!');
			return;
		}
		w = $(this).attr('width')?$(this).attr('width'):500;
		h = $(this).attr('height')?$(this).attr('height'):520;
		$(this).dialog({
			bgiframe: true,
			autoOpen: false,
			width : w *1,
			height: h *1,
			
			modal: true,
			resizable: false,
			buttons: {
			'Submit': function() {
				if ($(this).find('FORM:has(INPUT.mandatory), FORM:has(SELECT.mandatory), FORM:has(TEXTAREA.mandatory)').length){
					if (!validate_any_form($(this).find('FORM:has(INPUT.mandatory), FORM:has(SELECT.mandatory), FORM:has(TEXTAREA.mandatory)').get(0)))
						return ;
				}
				$(this).find('FORM').submit();
				//$(this).dialog('close');
				},
			Cancel: function() {
				$(this).dialog('close');
				}
			},
			close: function() {
				$(this).find("INPUT, SELECT, TEXTAREA, LABEL").removeClass('mandatory_selected');
				$(this).find("DIV.form_err_message").hide();
				$(this).find("DIV.form_err_message DIV.checkbox_mandatory_error").hide();
			}
		});
	})

}

function init_supplies_cat_list() {
	$("a.supplies_cat").click(function () {
		$("#PRODUCTS_ACCESSORIES").html('<center><span class="loading_message">Loading...</span></center>');
		$.ajax({
		  url: "/?section=plain_list&ac=ajax_supplies&MODEL=" + $(this).attr("rel") + "&SUPPLY_TYPE=" + $(this).attr("dst"),
		  cache: false,
		  async: true,
		  success: function(html){
		    $("#PRODUCTS_ACCESSORIES").html(html);
		    ($('FORM.add2cart_related')).each(function(){
					if ($(this).find('.related_items_checkbox').length)
						$(this).find('.button4add2cart_related').show();
					else
						$(this).find('.button4add2cart_related').hide();
			});
		  }
		});
	    $("a.supplies_cat").removeClass("active");
	    $(this).addClass("active");
		$(this).blur();
		return false;
	});
	$("a.supplies_cat").each(function(i,obj){
		if ($(obj).attr("dst")=='ribbons')
			$(obj).click();
	});
	
	if ($('FORM.add2cart_related').length){
		if (('FORM.add2cart_related .related_items_checkbox').length)
			$('FORM.add2cart_related .button4add2cart_related').show()
		else
			$('FORM.add2cart_related .button4add2cart_related').hide()
	}
	
}

function init_contact_form_dialog(){
	if (!$('div.contact_from_popup').length)
		return;
	$('div.contact_from_popup').hide();
	$('div.contact_from_popup').find('INPUT[type=submit]').hide();
	$('div.contact_from_popup').find('INPUT[type=image]').hide();
	
	$('.contact_from_popup_opener').click(function(){
		if ($(this).attr('rel'))
			$('#'+$(this).attr('rel')).dialog('open');
		else
			$('div.contact_from_popup').dialog('open');
		return false;
	});
	
	$('div.contact_from_popup').each(function(){
		if ($(this).attr('ID') == ''){
			alert('Form error! Div with class .contact_from_popup should have an ID!');
			return;
		}
		w = $(this).attr('width')?$(this).attr('width'):450;
		h = $(this).attr('height')?$(this).attr('height'):450;
		$(this).dialog({
			bgiframe: true,
			autoOpen: false,
			width : w *1,
			height: h *1,
			
			modal: true,
			buttons: {
			'Submit': function() {
				if ($(this).find('FORM:has(INPUT.mandatory), FORM:has(SELECT.mandatory), FORM:has(TEXTAREA.mandatory)').length){
					if (!validate_any_form($(this).find('FORM:has(INPUT.mandatory), FORM:has(SELECT.mandatory), FORM:has(TEXTAREA.mandatory)').get(0)))
						return ;
				}
				$(this).find('FORM').submit();
				//$(this).dialog('close');
				},
			Cancel: function() {
				$(this).dialog('close');
				}
			},
			close: function() {
				$(this).find("INPUT, SELECT, TEXTAREA, LABEL").removeClass('mandatory_selected');
				$(this).find("DIV.form_err_message").hide();
				$(this).find("DIV.form_err_message DIV.checkbox_mandatory_error").hide();
			}
		});
	})
}


//Mouse position
var mouse_position;

//Products list alignment
function init_products_list() {
	var maxHeight = 0;
	$.each( $("#product_table tr"), function(i, obj){
		maxHeight = 0;
		$.each( $(obj).find("div.item_container"), function(i, object){
			//$(object).prepend("<div style='position:absolute;'>" + $(object).height() + "px</div>");
			if ( $(object).height() > maxHeight )
				maxHeight = $(object).height();
		});
		//$(obj).append("<div style='position:absolute;color:blue;margin-top:-18px;'>" + maxHeight + "px</div>");
		$.each( $(obj).find("div.item_container"), function(i, object){
			$(object).find("div.heighter").height(maxHeight - $(object).height());
			//$(object).find("div.heighter").css("border","#ff0000 1px solid");
			//$(object).find("div.heighter").prepend("<div style='position:absolute;color:red;'>" + $(object).find("div.heighter").height() + "px</div>");
		});
	});
}

//Main menu related functions
function init_left_menu(){
	var busy = 0;
	var timeouts = new Array();
	var object;
	/*if ($.browser.msie && $('div#left_sidebar .sidemenu UL LI UL LI UL LI:not(div#left_sidebar .sidemenu UL LI UL LI UL LI UL LI)').length){
		$('div#left_sidebar .sidemenu UL LI UL LI UL LI:not(div#left_sidebar .sidemenu UL LI UL LI UL LI UL LI)')
		.filter(function (index) {
			return $(this).find("SPAN").length > 0;
        })
		.css("margin-bottom","-3px");
		$('div#left_sidebar .sidemenu UL LI UL LI UL LI:not(div#left_sidebar .sidemenu UL LI UL LI UL LI UL LI)')
		.filter(function (index) {
			return $(this).find("UL").length > 0;
        })
		.css("margin-bottom","-3px");
	}*/
	$('div#left_sidebar .sidemenu UL LI UL LI UL LI').hover(
		function (){
			$(this).find('UL').show();
			$(this).find('LI').show();
		},
		function (){
			$(this).find('UL').hide();
			$(this).find('LI').hide();
		}
	);
	$('div#left_sidebar .sidemenu LI A.menu_arrow:not(div#left_sidebar .sidemenu LI LI A)')
		.click(
				function (){
					var offset = $(this).offset();
					if (mouse_position.x - offset.left < 10) {
						var parent_li = $(this).parents("LI").get(0);
						$(parent_li).toggleClass("selected_menu_item");
						return false;
					}
					location.href = $(this).attr("href");
				}
		);
	$('div#left_sidebar .sidemenu LI A.item_link:not(div#left_sidebar .sidemenu LI LI A)')
		.hover(
			function (){
				var offset = $(this).offset();
//				if (mouse_position.x - offset.left < 10)
//					return false;
				var parent_li = $(this).parents("LI").get(0);
				if (!$(parent_li).find("UL").length || $(parent_li).hasClass("selected_menu_item"))
					return;
				object = $(this);
				timeouts = new Array();
				timeouts[0] = setTimeout(function(){
					object.addClass("hover");
				}, 250);
				timeouts[1] = setTimeout(function(){
					object.removeClass("hover");
				}, 400);
				timeouts[2] = setTimeout(function(){
					object.addClass("hover");
				}, 550);
				timeouts[3] = setTimeout(function(){
					object.removeClass("hover");
				}, 700);
				timeouts[4] = setTimeout(function(){
					object.addClass("hover");
				}, 850);
				timeouts[5] = setTimeout(function(){
					object.removeClass("hover");
				}, 1000);
				busy = 1;
				timeouts[6] = setTimeout(function(){
					$(parent_li).addClass("selected_menu_item").addClass("open");
					busy = 0;
				}, 1000);
			},
			function (){
				if (busy) {
					$(this).removeClass("hover");
					for (var timeout in timeouts) {
						clearTimeout(timeouts[timeout]);
					}
				}
			}
		)
	;
}



function defPosition(event) {
    var x = y = 0;
    if (document.attachEvent != null) { // Internet Explorer & Opera
        x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        y = window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    } else if (!document.attachEvent && document.addEventListener) { // Gecko
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    } else {
        // Do nothing
    }
    return {x:x, y:y};
}



function set_new_tab(tab_id, main_tabs_id, cookie_name, atr2use){
	new_tab = $(main_tabs_id + " A.tabs_header_caption["+atr2use+"="+tab_id+"]");
	if(!atr2use)
		atr2use = '';
	
	if ($(new_tab.parent()).attr('class') == 'tabs_selected')
		return false;
	curr_tab = $(main_tabs_id + ' .tabs_selected A.tabs_header_caption').attr(atr2use);
	if (typeof(curr_tab) == 'string')
		$('#' + curr_tab).removeClass('box_selected');
	el = $(main_tabs_id + ' .tabs_selected');
	el.removeClass('tabs_selected');
	el.addClass('tabs');
	$(new_tab.parent().parent()).addClass('tabs_selected');
	$(new_tab.parent().parent()).removeClass('tabs');
	$('#' + new_tab.attr(atr2use)).addClass('box_selected');
	$.cookie("TAB_"+cookie_name, tab_id, { path: '/'});
}

function init_tabs(main_tabs_id, cookie_prefix_div_id){
	if (!$('#'+main_tabs_id).length)
		return false;	
	if (!$('#'+main_tabs_id + ' A.tabs_header_caption').length){
		alert('no tabs found');
		return false;
	}
	
	cookie_name = main_tabs_id + $('#'+cookie_prefix_div_id).text();
	
	$('#'+main_tabs_id +' A.tabs_header_caption').click(
		function(){
			atr2use = $(this).attr('rel')?'rel':'href';
			set_new_tab($(this).attr(atr2use), '#'+main_tabs_id, cookie_name, atr2use);
			return false;
		}
	);
	
	
	if ($.cookie("TAB_"+cookie_name))
		set_new_tab($.cookie("TAB_"+cookie_name), main_tabs_id, cookie_name);
	return true;
}



function init_related_forms(){
	$('FORM.add2cart_related').submit(function (){
		this_id = $(this).attr('ID');
		if (!$('#'+this_id+' .related_items_checkbox').length){
				setCookie('after_login_return_url',document.location.href,'','/');
				window.document.location.href = '/login/';
				return false;
		}
		
		var atleast_one = false;
		$('#'+this_id+' .related_items_checkbox').each(
			function (){
				if ($(this).attr('checked'))
					atleast_one = true;
			}
		);
		if (atleast_one)
			return true;
		alert('Select at least one product');
		return false;
	});

}

function init_reg4price() {
	if($('#reg4price_popup').length < 1)
		return false;
	var open = false;
	if(typeof($('#reg4price_popup').attr('open')) != 'undefined' && $('#reg4price_popup').attr('open')=='true')
		open = true;
	$('#reg4price_popup').dialog({
		autoOpen: open,
		height: 450,
		width: 500,
		modal: true,
		resizable: true,
		open: function(){
			setCookie('after_login_return_url',document.location.href,'','/');//.replace(document.location.search,'').replace('#'+document.location.hash,'')
		}
	});
	$(".open_popup").live("click", function(){
		$("#" + $(this).attr('rel')).dialog('open');
		return false;
	});
	$(".flip_areas").click(function(){
		$("#"+$(this).attr('rel')).hide();
		$("#"+$(this).attr('dst')).show();
		return false;
	});
	if(typeof($('#reg4price_popup').attr('register')) != 'undefined' && $('#reg4price_popup').attr('register')=='true')
		$("a.flip_areas[dst=popup_register_block]").click();
}

function setCookie(name, value, expires, path, domain, secure) {
	var curCookie = name + "=" + escape(value) +
			((expires) ? "; expires=" + expires.toGMTString() : "") +
			((path) ? "; path=" + path : "") +
			((domain) ? "; domain=" + domain : "") +
			((secure) ? "; secure" : "");
	document.cookie = curCookie;
}

//name - name of the desired cookie
//* return string containing value of specified cookie or null if cookie does not exist
function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	tmp = begin;
	while(true){
		tmp = dc.indexOf("; " + prefix, tmp+1);
		if (tmp>0){
			begin=tmp;
			continue;
		}
		break;
	}
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else
		begin += 2;
	var end = document.cookie.indexOf(";", begin);
	if (end == -1)
		end = dc.length;
	return unescape(dc.substring(begin + prefix.length, end));
}

//main jquery hook-up function
$(document).ready(
	function() {
		init_country_state_block('');
		init_country_state_block('SHIP');
		init_checkout_form();
		init_form_validation();
		init_lightbox();
		init_comments();
		
		init_form_dialog();
		init_after_login_return();
		init_after_logout_return();
		init_non_auth_message();
		$(".jqueryui_tabs").tabs();
		
		init_mega_menu();
		init_fading_tabs();
		
		//Patch, that fixes z-index issue. Must be after init_fading_tabs
		correct_zindex4menu('UL.mega_menu');
		
		
		init_confirmations();
		init_msgbox();
		init_dialog();
		init_on_focus_replace();
		
		init_date_pickers();
		
		init_calendar_selectors();
		
		init_categories_index_list();
		
		init_contact_form_dialog();
		init_supplies_cat_list();
		
		init_left_menu();
		init_products_list();
		init_tabs('CATEGORY_TABS', 'THIS_CAT_TAG');
		init_tabs('PRODUCTS_TABS', 'THIS_CAT_TAG');
		init_tabs('PRODUCT_ZOOM_TABS', 'THIS_PRODUCT_ID');
		init_related_forms();
		
		init_reg4price();
		
		if (typeof(on_custom_jquery_init) != 'undefined')
			on_custom_jquery_init();
	}
);


$(document).mousemove(
	function(event) {
	    var event = event || window.event;
	    mouse_position = defPosition(event);
	}
);



/* Jcookie */

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
