function init_forum() {
	if (!$("#forum").length)
		return;
		
	/**
	* bbCode control by subBlue design [ www.subBlue.com ]
	* Includes unixsafe colour palette selector by SHS`
	*/
	
	// Startup variables
	var imageTag = false;
	var theSelection = false;
	
	// Check for Browser & Platform for PC & IE specific bits
	// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
	var clientPC = navigator.userAgent.toLowerCase(); // Get client info
	var clientVer = parseInt(navigator.appVersion); // Get browser version
	
	var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1));
	var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1));
	
	var baseHeight;
	//onload_functions.push('initInsertions()');
	
	/**
	* Shows the help messages in the helpline window
	*/
	function helpline(help)
	{
		document.forms[form_name].helpbox.value = help_line[help];
	}
	
	/**
	* Fix a bug involving the TextRange object. From
	* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
	*/ 
	function initInsertions() 
	{
		var doc;
	
		if ($("#forum #" + form_name).length)
		{
			doc = document;
		}
		else if (opener)
		{
			doc = opener.document;
		}
		else
		{
			return;
		}
	
		var textarea = doc.forms[form_name].elements[text_name];
	
	/*	if (is_ie && typeof(baseHeight) != 'number')
		{
			textarea.focus();
			baseHeight = doc.selection.createRange().duplicate().boundingHeight;
	
			if (!document.forms[form_name])
			{
				document.body.focus();
			}
		}
	*/
	}
	
	/**
	* bbstyle
	*/
	function bbstyle(bbnumber)
	{	
		if (bbnumber != -1)
		{
			bbfontstyle(bbtags[Number(bbnumber)], bbtags[Number(bbnumber)+1]);
		} 
		else 
		{
			insert_text('[*]');
			document.forms[form_name].elements[text_name].focus();
		}
	}
	
	/**
	* Apply bbcodes
	*/
	function bbfontstyle(bbopen, bbclose)
	{
		theSelection = false;
		
		var textarea = document.forms[form_name].elements[text_name];
	
		textarea.focus();
	
		if ((clientVer >= 4) && is_ie && is_win)
		{
			// Get text selection
			theSelection = document.selection.createRange().text;
	
			if (theSelection)
			{
				// Add tags around selection
				document.selection.createRange().text = bbopen + theSelection + bbclose;
				document.forms[form_name].elements[text_name].focus();
				theSelection = '';
				return;
			}
		}
		else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0))
		{
			mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
			document.forms[form_name].elements[text_name].focus();
			theSelection = '';
			return;
		}
		
		//The new position for the cursor after adding the bbcode
		var caret_pos = getCaretPosition(textarea).start;
		var new_pos = caret_pos + bbopen.length;		
	
		// Open tag
		insert_text(bbopen + bbclose);
	
		// Center the cursor when we don't have a selection
		// Gecko and proper browsers
		if (!isNaN(textarea.selectionStart))
		{
			textarea.selectionStart = new_pos;
			textarea.selectionEnd = new_pos;
		}	
		// IE
		else if (document.selection)
		{
			var range = textarea.createTextRange(); 
			range.move("character", new_pos); 
			range.select();
			storeCaret(textarea);
		}
	
		textarea.focus();
		return;
	}
	
	/**
	* Insert text at position
	*/
	function insert_text(text, spaces, popup)
	{
		var textarea;
		
		if (!popup) 
		{
			textarea = document.forms[form_name].elements[text_name];
		} 
		else 
		{
			textarea = opener.document.forms[form_name].elements[text_name];
		}
		if (spaces) 
		{
			text = ' ' + text + ' ';
		}
		
		if (!isNaN(textarea.selectionStart))
		{
			var sel_start = textarea.selectionStart;
			var sel_end = textarea.selectionEnd;
	
			mozWrap(textarea, text, '')
			textarea.selectionStart = sel_start + text.length;
			textarea.selectionEnd = sel_end + text.length;
		}
		else if (textarea.createTextRange && textarea.caretPos)
		{
			if (baseHeight != textarea.caretPos.boundingHeight) 
			{
				textarea.focus();
				storeCaret(textarea);
			}
	
			var caret_pos = textarea.caretPos;
			caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
		}
		else
		{
			textarea.value = textarea.value + text;
		}
		if (!popup) 
		{
			textarea.focus();
		}
	}
	
	/**
	* Add inline attachment at position
	*/
	function attach_inline(index, filename)
	{
		insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
		document.forms[form_name].elements[text_name].focus();
	}
	
	/**
	* Add quote text to message
	*/
	function addquote(post_id, username)
	{
		var message_name = 'message_' + post_id;
		var theSelection = '';
		var divarea = false;
	
		if (document.all)
		{
			divarea = document.all[message_name];
		}
		else
		{
			divarea = document.getElementById(message_name);
		}
	
		// Get text selection - not only the post content :(
		if (window.getSelection)
		{
			theSelection = window.getSelection().toString();
		}
		else if (document.getSelection)
		{
			theSelection = document.getSelection();
		}
		else if (document.selection)
		{
			theSelection = document.selection.createRange().text;
		}
	
		if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null)
		{
			if (divarea.innerHTML)
			{
				theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
				theSelection = theSelection.replace(/<br\/>/ig, '\n');
				theSelection = theSelection.replace(/&lt\;/ig, '<');
				theSelection = theSelection.replace(/&gt\;/ig, '>');
				theSelection = theSelection.replace(/&amp\;/ig, '&');
				theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
			}
			else if (document.all)
			{
				theSelection = divarea.innerText;
			}
			else if (divarea.textContent)
			{
				theSelection = divarea.textContent;
			}
			else if (divarea.firstChild.nodeValue)
			{
				theSelection = divarea.firstChild.nodeValue;
			}
		}
	
		if (theSelection)
		{
			insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
		}
	
		return;
	}
	
	/**
	* From http://www.massless.org/mozedit/
	*/
	function mozWrap(txtarea, open, close)
	{
		var selLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		var scrollTop = txtarea.scrollTop;
	
		if (selEnd == 1 || selEnd == 2) 
		{
			selEnd = selLength;
		}
	
		var s1 = (txtarea.value).substring(0,selStart);
		var s2 = (txtarea.value).substring(selStart, selEnd)
		var s3 = (txtarea.value).substring(selEnd, selLength);
	
		txtarea.value = s1 + open + s2 + close + s3;
		txtarea.selectionStart = selEnd + open.length + close.length;
		txtarea.selectionEnd = txtarea.selectionStart;
		txtarea.focus();
		txtarea.scrollTop = scrollTop;
	
		return;
	}
	
	/**
	* Insert at Caret position. Code from
	* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
	*/
	function storeCaret(textEl)
	{
		if (textEl.createTextRange)
		{
			textEl.caretPos = document.selection.createRange().duplicate();
		}
	}
	
	/**
	* Color pallette
	*/
	function colorPalette(dir, width, height)
	{
		var r = 0, g = 0, b = 0;
		var numberList = new Array(6);
		var color = '';
	
		numberList[0] = '00';
		numberList[1] = '40';
		numberList[2] = '80';
		numberList[3] = 'BF';
		numberList[4] = 'FF';
	
		document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
	
		for (r = 0; r < 5; r++)
		{
			if (dir == 'h')
			{
				document.writeln('<tr>');
			}
	
			for (g = 0; g < 5; g++)
			{
				if (dir == 'v')
				{
					document.writeln('<tr>');
				}
				
				for (b = 0; b < 5; b++)
				{
					color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
					document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
					document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
					document.writeln('</td>');
				}
	
				if (dir == 'v')
				{
					document.writeln('</tr>');
				}
			}
	
			if (dir == 'h')
			{
				document.writeln('</tr>');
			}
		}
		document.writeln('</table>');
	}
	
	
	/**
	* Caret Position object
	*/
	function caretPosition()
	{
		var start = null;
		var end = null;
	}
	
	
	/**
	* Get the caret position in an textarea
	*/
	function getCaretPosition(txtarea)
	{
		var caretPos = new caretPosition();
		
		// simple Gecko/Opera way
		if(txtarea.selectionStart || txtarea.selectionStart == 0)
		{
			caretPos.start = txtarea.selectionStart;
			caretPos.end = txtarea.selectionEnd;
		}
		// dirty and slow IE way
		else if(document.selection)
		{
		
			// get current selection
			var range = document.selection.createRange();
	
			// a new selection of the whole textarea
			var range_all = document.body.createTextRange();
			range_all.moveToElementText(txtarea);
			
			// calculate selection start point by moving beginning of range_all to beginning of range
			var sel_start;
			for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++)
			{		
				range_all.moveStart('character', 1);
			}
		
			txtarea.sel_start = sel_start;
		
			// we ignore the end value for IE, this is already dirty enough and we don't need it
			caretPos.start = txtarea.sel_start;
			caretPos.end = txtarea.sel_start;			
		}
	
		return caretPos;
	}
	
	function init_form () {
		initInsertions();
	}
	
	function init_reply_form() {
		form_name = 'reply_form_small';
		text_name = 'ADATA[MESSAGE]';
		$("#forum #form-comment-add input[TYPE=hidden]").attr("disabled", "disabled");
		$("#forum #form-comment-add #comment_ac, #forum #form-comment-add #comment_section, #forum #form-comment-add #comment_cat_tag").removeAttr("disabled");
		init_form();
	}
		
	var form_name = 'create_topics_form';
	var text_name = 'ADATA[MESSAGE]';
	var load_draft = false;
	var upload = false;

	// Define the bbCode tags
	var bbcode = new Array();
	var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]','[flash=]', '[/flash]','[size=]','[/size]');
	var imageTag = false;

	// Helpline messages
	var help_line = {
		b: 'Bold: [b]text[/b]',
		i: 'Italic: [i]text[/i]',
		u: 'Underlined: [u]text[/u]',
		q: 'Quote: [quote]text[/quote]',
		c: 'Code: [code]code[/code]',
		l: 'List: [list]text[/list]',
		o: 'Numbered list: [list=]text[/list]',
		p: 'Insert image: [img]http://image_url[/img]',
		w: 'Insert hyperlink: [url]http://url[/url] or [url=http://url]URL text[/url]',
		a: 'Insert attachment: [attachment=]filename.ext[/attachment]',
		s: 'Font color: [color=red]text[/color] You can also use this construction: color=#FF0000',
		f: 'Font size: [size=85]small text[/size]',
		e: 'List: add an element',
		d: 'Flash: [flash=width,height]http://url[/flash]'
			}

	var panels = new Array('');
	var show_panel = '';

	$("#forum .create_topic").click(function(){
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		$("#forum .new-topic-cancel").show();
		$("#forum #form_topics").insertAfter('#forum #forum_cat_list_end');
		$("#forum #form_topics").show();
		form_name = 'create_topics_form';
		text_name = 'DATA[MESSAGE]';
		init_form();
		$("#forum #form_topics #PICT1").attr("name","DATA[PICT1]");
		location.href = '#NEWTOPIC';
		return 1;
	});
	$("#forum .forum_subscribe").click(function(){
		if (confirm($(this).attr("rel") + ' "' + $(this).attr("title") + '"?')) {
			$("#forum #forum_subscribe_form #subscribe_topic_id").attr("value", $(this).attr("href"));
			$("#forum #forum_subscribe_form #subscribe_message").attr("value", 1);
			$("#forum #forum_subscribe_form").submit();
		}
	});
	$("#forum .forum_unsubscribe").click(function(){
		if (confirm($(this).attr("rel") + ' "' + $(this).attr("title") + '"?')) {
			$("#forum #forum_subscribe_form #subscribe_topic_id").attr("value", $(this).attr("href"));
			$("#forum #forum_subscribe_form #unsubscribe_message").attr("value", 1);
			$("#forum #forum_subscribe_form").submit();
		}
	});
	$("#forum .new-topic-cancel").click(function(){
		$("#forum #form_topics").hide();
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").show();
	});
	$("#forum .insert_smiley").click(function(){
		insert_text($(this).attr("alt"), $(this).attr("href"));
	});
	$("#forum .insert_bbcode").click(function(){
		bbstyle($(this).attr("href"));
	});
	$("#forum #create_topics_form").submit(function(){
		//apply_rich_editor_text('create_topics_form', 'MESSAGE');
		res = generic_mandatory_check($(this).attr("name"), 'FORM_VALIDATOR', 'Validation Number')
  			  + generic_mandatory_check(form_name, '$NAME_NAME', 'Topic')
 			  + generic_mandatory_check(form_name, '$MESSAGE_NAME', '$MESSAGE_CAPTION');
 		if (res!=''){
 			alert(res);
 			return false;
 		}
 		return true;
	});
	$("#forum .clear_form").click(function(){
		var parent = $(this).parents("form").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$(parent_id + " textarea").attr("value", "");
	});
	$("#forum .fold").click(function(){
		$("#forum .forum_comment_content2hide").hide();
		$("#forum .forum_attach_content2hide").hide();
		setCookie('forum_posts_opened', 0, "", "/");
	});
	$("#forum .unfold").click(function(){
		$("#forum .forum_comment_content2hide").show();
		$("#forum .forum_attach_content2hide").show();
		setCookie('forum_posts_opened', 1, "", "/");
	});
	if (!isNaN(getCookie('forum_posts_opened')))
	{
		if (getCookie('forum_posts_opened')=='1') {
			$("#forum .forum_comment_content2hide").show();
			$("#forum .forum_attach_content2hide").show();
		}
	}
	$("#forum .s-msg-cancel").click(function(){
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum #form-comment-edit, #form-comment-add").hide();
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").show();
	});
	$("#forum .add_new_post_button").click(function(){
		init_reply_form();
		$("#forum #form-comment-add #comment_catid").removeAttr("disabled");
		$("#forum #form-comment-add #comment_catid").attr("value", $(this).attr("rel"));
		$("#forum #form-comment-add #comment_ac").attr("value", "insert");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", "");
		$("#forum #form-comment-add").insertAfter('#forum #topic_posts_bar');
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .s-msg-reply").click(function(){
		init_reply_form();
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum " + parent_id + " .forum_comment_content2hide").toggle();
		$("#forum " + parent_id + " .forum_attach_content2hide").toggle();
		$("#forum #form-comment-add #comment_PARENT_ID, #forum #form-comment-add #comment_LEVEL, #forum #form-comment-add #comment_subject, #forum #form-comment-add #comment_username, #forum #form-comment-add #comment_catid").removeAttr("disabled");
		$("#forum #form-comment-add #comment_PARENT_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add #comment_LEVEL").attr("value", parseInt($("#LEVEL_" + $(parent).attr("id")).attr("value")) + 1);
		$("#forum #form-comment-add #comment_ac").attr("value", "insert");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", "");
		$("#forum #form-comment-add").insertAfter('#forum #attach' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .s-msg-quote").click(function(){
		init_reply_form();
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum " + parent_id + " .forum_comment_content2hide").toggle();
		$("#forum " + parent_id + " .forum_attach_content2hide").toggle();
		$("#forum #form-comment-add #comment_PARENT_ID, #forum #form-comment-add #comment_LEVEL, #forum #form-comment-add #comment_subject, #forum #form-comment-add #comment_username, #forum #form-comment-add #comment_catid").removeAttr("disabled");
		$("#forum #form-comment-add #comment_PARENT_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add #comment_LEVEL").attr("value", parseInt($("#LEVEL_" + $(parent).attr("id")).attr("value")) + 1);
		$("#forum #form-comment-add #comment_ac").attr("value", "insert");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", "[quote=" + $("#AUTHOR_" + $(parent).attr("id")).attr("value") + "]" + $("#CODE_" + $(parent).attr("id")).attr("value") + "[/quote]");
		$("#forum #form-comment-add").insertAfter('#forum #attach' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .s-msg-edit").click(function(){
		init_reply_form();
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum " + parent_id + " .forum_comment_content2hide").toggle();
		$("#forum " + parent_id + " .forum_attach_content2hide").toggle();
		$("#forum #form-comment-add #edit_ID").removeAttr("disabled");
		$("#forum #form-comment-add #edit_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add #comment_ac").attr("value", "update");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", $("#CODE_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").insertAfter('#forum #attach' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .post_header").click(function(){
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = $(parent).attr("id");
		$("#forum #comment" + $("#ID_" + parent_id).attr("value")).toggle();
		$("#forum #attach" + $("#ID_" + parent_id).attr("value")).toggle();
	});
	
}

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() {
	$.each($("a"),function(i,obj){
		if ($(obj).attr('rel') == 'lightbox')
			$(obj).lightBox();
	});
	$(".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/";
	});
}

function init_non_auth_message() {
	$(".non_auth").click(function(){
		alert($(this).attr("title"));
		location.href = $(this).attr("href");
	});
}

function init_gallery() {
	//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.gallery_full_list').serialScroll({
				//target:'.gallery_full_list',
				items:'li', // Selector to the items ( relative to the matched elements, '#sections' in this case )
				prev:'.gallery_nav_prev',// Selector to the 'prev' button (absolute!, meaning it's relative to the document)
				next:'.gallery_nav_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:700,// 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)
				
				//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 )		
				//cycle:true,// Cycle endlessly ( constant velocity, true is the default )
				//step:1, // 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
				}
			});
		});
	//}
}

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").dialog({
		height: 350,
		width: 600,
		autoOpen: false
	});
	$(".open_msgBox")
		.css({'cursor':'pointer'})
		.click(function() {
			$("#" + $(this).attr("rel")).dialog('open');
			return false;
		});
}

function init_slideshow() {
	$VisualLightBoxParams$ = {autoPlay:true,borderSize:39,enableSlideshow:true,overlayOpacity:0,startZoom:true};
	init_lightslideshow();
	$(".start_slideshow_here").click();
	$(".start_gallery_slideshow")
		.css({'cursor':'pointer'})
		.click(function(){
			$("#firstimg").click();
		});
}

function init_on_focus_replace() {
	$('input.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() {
	$.each($('.tabs_listing'),function(i,obj){
		$(obj).innerfade({
			speed: 2000,
			timeout: 4000,
			containerheight: $(obj).css("height")
		});
	});

}

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 == "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;
   // 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 init_form_validation(){
	
	if (!$("FORM:has(INPUT.mandatory)").length)
		return;
	$("FORM:has(INPUT.mandatory), FORM:has(SELECT.mandatory), FORM:has(TEXTAREA.mandatory)").submit(function(){
		$(this).find("INPUT, SELECT, TEXTAREA").removeClass('mandatory_selected');
		$(this).find("DIV.form_err_message").hide();
		
		$("INPUT[name='FORM_VALIDATOR']").addClass('mandatory');
		
		var msg = '';
			

		if ($(this).find("INPUT.mail, INPUT#EMAIL").length){
			email_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

			$(this).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';
				}
			});
		}

		$(this).find("DIV.form_err_message SPAN.form_email_error").hide();
		if (msg!='')
			$(this).find("DIV.form_err_message SPAN.form_email_error").show();
		

		$(this).find("DIV.form_err_message SPAN.form_password_error").hide();		
		$(this).find("DIV.form_err_message SPAN.form_mandatory_error").hide();		
		$(this).find("DIV.form_err_message SPAN.form_cc_error").hide();		
		
		if (($(this).find("INPUT[TYPE=password]").length>1) &&
			$(this).find("INPUT#PASSWORD1").length &&
			$(this).find("INPUT#PASSWORD2").length &&
			($(this).find("INPUT#PASSWORD1").attr('value') != $(this).find("INPUT#PASSWORD2").attr('value'))
		){

			$(this).find("INPUT#PASSWORD1").addClass('mandatory_selected');
			$(this).find("INPUT#PASSWORD2").addClass('mandatory_selected');
			$(this).find("DIV.form_err_message SPAN.form_password_error").show();
			if (msg) msg+='<br>';
			msg+= 'Passwords do not match, please try again...';
		}

		if ($(this).find("INPUT.mandatory[value=''], SELECT.mandatory[value=''], TEXTAREA.mandatory[value='']").length){
			if (msg) msg+='<br>';
			msg+= 'Please fill up missing fields below';
			$(this).find("DIV.form_err_message SPAN.form_mandatory_error").show();
		}
		if ($(this).find("INPUT#CC_NUMBER").length && $(this).find("#CC_TYPE").length &&
			$(this).find("INPUT#CC_NUMBER").hasClass('mandatory')){
			
			
			$(this).find("DIV.form_err_message SPAN.form_cc_error").hide();
			cc_v = $(this).find("INPUT.mandatory#CC_NUMBER").attr('value');
			cc_t = $(this).find("#CC_TYPE").attr('value');
			if (!isValidCreditCard(cc_t, cc_v) || !luhn_check(cc_v)){
				if (msg) msg+='<br>';
				msg+=' Credit Card is invalid';
				$(this).find("DIV.form_err_message SPAN.form_cc_error").show();
				$(this).find("INPUT.mandatory#CC_NUMBER").addClass('mandatory_selected');
			}
		
			
		}
	
		
		if (msg=='')
			return true;
		$(this).find("INPUT.mandatory[value=''], SELECT.mandatory[value=''], TEXTAREA.mandatory[value='']").addClass('mandatory_selected');
		$(this).find("INPUT.mandatory[value='']:first, SELECT.mandatory[value='']:first, TEXTAREA.mandatory[value='']:first").focus();
		if (!$(this).find("DIV.form_err_message").length){
			$(this).prepend('<div class="form_err_message error_mesage">'+msg+'</div>');
		}
		$(this).find("DIV.form_err_message").show();
		if ($(this).find("DIV.form_err_message").html()=='')
			$(this).find("DIV.form_err_message").html(msg);

		return false;
	});
	$("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');
}

function init_job_offers_menu() {
	$(".seemore")
		.css({'cursor':'pointer'})
		.click(function(){
			var parent = $(this).parents("div.left_items_container").get(0);
			$(parent).find("div.hidden").removeClass("hidden");
			parent = $(this).parents("div").get(0);
			$(parent).addClass("hidden");
		});
	$(".search_submit_link")
		.css({'cursor':'pointer'})
		.click(function(){
			var id = $(this).attr("rel");
			$("#" + id).attr("value", $(this).text());
			$("#search_frm").submit();
		});
}

/******* 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 (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
				}
			});
		});
	//}
}

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_wishlist(){
	$('.add2wishlist').click(function () {
		tmp = $(this).attr('id').split('-');
		if (tmp.length < 3){
			alert('ID should have 3 parts, e.g. addtowishlist-products-$ID');
			return false;
		}
		
		$('#'+$(this).attr('id') + '-adding-caption').show();
		$(this).hide();
		
		var section = $(tmp).get(1);
		
		$.get('index.php?'+Math.random(), { section: $(tmp).get(1), ac: "add2wishlist", ID: $(tmp).get(2) }, function(data) {
			tmp = data.split('-');
			if (tmp.length > 2 || !$('#add2wishlist-'+section+'-'+$(tmp).get(0) + '-adding-caption').length){
			   alert('Error: ' + tmp);	
			   return;
			}
			$('#add2wishlist-'+section+'-'+$(tmp).get(0) + '-adding-caption').hide();
			if (tmp.length < 2){
				$('#add2wishlist-'+section+'-'+$(tmp).get(0) + '-added-caption').show();
				$('#remove_from_wishlist-'+section+'-'+$(tmp).get(0)).show();
			}
			else
				alert($(tmp).get(1));
  			//$('#'+$(this).attr('id') + '-adding-caption').show();
		});
		return false;
	});
	$('.remove_from_wishlist').click(function () {
		tmp = $(this).attr('id').split('-');
		if (tmp.length < 3){
			alert('ID should have 3 parts, e.g. remove_from_wishlist-products-$ID');
			return false;
		}
		
		$('#'+$(this).attr('id') + '-removing-caption').show();
		$(this).hide();
		
		var section = $(tmp).get(1);
		
		$.get('index.php?'+Math.random(), { section: $(tmp).get(1), ac: "remove_from_wishlist", ID: $(tmp).get(2) }, function(data) {
			tmp = data.split('-');
			if (tmp.length > 2 || !$('#remove_from_wishlist-'+section+'-'+$(tmp).get(0) + '-removing-caption').length){
			   alert('Error: ' + tmp);	
			   return;
			}
			$('#remove_from_wishlist-'+section+'-'+$(tmp).get(0) + '-removing-caption').hide();
			if (tmp.length < 2){
				$('#remove_from_wishlist-'+section+'-'+$(tmp).get(0) + '-removed-caption').show();
				$('#add2wishlist-'+section+'-'+$(tmp).get(0)).show();
			}
			else
				alert($(tmp).get(1));
  			//$('#'+$(this).attr('id') + '-adding-caption').show();
		});
		return false;
	});
}
	




//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_forum();
		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_gallery();
		init_confirmations();
		init_msgbox();
		init_slideshow();
		init_on_focus_replace();
		init_job_offers_menu();
		
		init_date_pickers();
		
		init_calendar_selectors();
		
		init_categories_index_list();
		init_wishlist();
		
		
		
	}
);
