/* =================================================================================================== */
/*  iAct_Engine - scripts file                                                                         */
/* =================================================================================================== */

/* =================================================================================================== */

$(function(){

	$('input:password').bind('keypress',function(e){
		//alert(e.which)
		return non_whitespace(e);
	})

	$('.ajax_edit_module').live('click', function(ev){
		var href = $(this).attr('href');
		if(href.indexOf('#') < 0) ev.preventDefault();
		else window.location.hash = href;

		$('.ajax_content').addClass('hidden');

		$('<div />').insertBefore('.ajax_content').attr('id','ajax_edit_here');

		var url = window.location.href.split('#')[0] + ($(this).attr('href').replace(SITE_LINK, ''));
		var token = $(this).attr('rel');
		var target = $('#ajax_edit_here');

		includeModule(url, token, target);

	});

	$('.ajax_edit_module_cancel').live('click', function(ev){
		$('#ajax_edit_here').remove();
		$('.ajax_content').removeClass('hidden');
		window.location.hash = '';
	});

	$('.ajax_include_module').live('click', function(ev){
		ev.preventDefault();
		var url = $(this).attr('href');
		var token = $(this).attr('rel');
		var target = $(this).parents('.ajax_content').get(0);
		includeModule(url, token, target);
	});


	$('.hide_this').live('click', function(){

		var theAction = 'unhide'
		if($(this).attr('checked')==true){
			theAction = 'hide';
		}

		var token = $(this).val();
		var thisTr = $(this).parents('tr');
		var thisStatus = $(this).attr('checked');
		var thisItem = $(this);

		$.ajax({
			type:'post',
			url:SITE_LINK + ADMIN_SEO + '/',
			dataType:'json',
			data:'no_action=module-hide_this&how='+theAction+'&token='+token,
			success:function(data){
				if(data && data.message && data.type){
					thisItem.attr('checked',thisStatus);
					notification(data.message, data.type);
				} else {
					if(theAction=='hide'){
						thisTr.addClass('disabled');
					} else {
						thisTr.removeClass('disabled');
					}
				}
			}
		});

	})

	$('.approve_this').live('click', function(){

		var theAction = 'unapprove'
		if($(this).attr('checked')==true){
			theAction = 'approve';
		}

		var token = $(this).val();
		var thisTr = $(this).parents('tr');
		var thisStatus = $(this).attr('checked');
		var thisItem = $(this);

		$.ajax({
			type:'post',
			url:SITE_LINK + ADMIN_SEO + '/',
			dataType:'json',
			data:'no_action=module-approve_this&how='+theAction+'&token='+token,
			success:function(data){
				if(data && data.message && data.type){
					thisItem.attr('checked',thisStatus);
					notification(data.message, data.type);
				} else {
					bgcolor = thisTr.css('background-color');
					thisTr.animate({'background-color':'#444'},300).animate({'background-color':bgcolor},300);
				}
			}
		});

	})


	$('.editable_text').live('click', function(ev){
		ev.preventDefault();
		var token = $(this).attr('rel');
		var label = $(this).attr('title');
		if($('#edit_content_here').length < 1){
			var dialog = $('<div id="edit_content_here" />').load(
				SITE_LINK,
				{
					'no_token':token
				},
				function (responseText, textStatus, XMLHttpRequest) {
					dialog.dialog();
				}
			).dialog({
				width:'800px',
				title:'Edit Text Node: ' + label,
				modal:true,
				close:function(){
					$(this).remove();
				}
			});
		}

	});

	$('.ajax_link').live('click', function(ev){
		ev.preventDefault();

		var link = this;
		var tab = $(link).closest('.ajax_content');
		if( tab.length == 0 ) tab = false;
		var link = tab ? ( $(tab).attr('href') + $(link).attr('href') ) : $(link).attr('href');

		$.ajax({
			url:link,
			type:'get',
			beforeSend: function(){
				if( tab ) $(tab).html('<div style="margin:15px;"><strong>Loading...</strong></div>');
			},
			success: function(data){

				try {

					data = jQuery.parseJSON(data);
					if(data.message && data.type) notification(data.message, data.type);
					if(data.callback) eval(data.callback);

				} catch(e) {
					if(tab) $(tab).html(data);
				}


			}
		})

	});

	$('.ajax_form').livequery('submit', function(ev){

		var form = $(this);

		ev.preventDefault();

		if( $(form).validationEngine({ returnIsValid:true })){

			$.ajax({
				type:'post',
				url:($(form).attr('action') ? $(form).attr('action') : SITE_LINK),
				data:$(form).serialize(),
				dataType:'json',
				success:function(data){

					if(data.message && data.type) notification(data.message, data.type);
					if(data.callback) eval(data.callback);

					reloadAjaxContent(form);

					$.validationEngine.closePrompt(".required", true);

					$('#ajax_edit_here').remove();
					$('.ajax_content').removeClass('hidden');
					window.location.hash = '';
				}
			});

		}

		return false;
	})

	$('.blue_button').click(function(){
		$(this).addClass('pressed');
	})

	$('.notice').delegate(".close","click", function(){
		$(this).parents('.notice').fadeOut('fast');
	});
})


/* =================================================================================================== */

function init(){

/* ANCHOR  SCROLL */
	$('.scrollTo').click(function(){
		var mee = $(this).attr('href');
		//alert(mee);
		$(mee).show();
		$.scrollTo(mee,500);
		return false;
	});

/* CLOSE PARENT - actually href-not parent*/
	$('.closeHref').click(function(){
		var mee =$(this).attr('href');
		$(mee).hide();
		return false;
	});

}

/* =================================================================================================== */
function deleteEntry(token, el){

	if(confirm('Are you sure you want to delete this entry?')){
		$.ajax({
			type:'post',
			url:SITE_LINK + ADMIN_SEO + '/',
			dataType:'json',
			data:'no_action=module-delete&token='+token,
			success:function(data){
				notification(data.message, data.type);
				$($(el).parents('tr').get(0)).slideUp();
				$($(el).parents('.listing_row').get(0)).slideUp();
			}
		});
	}

}

/* =================================================================================================== */
function setHash(h){
	window.location.hash = h;
	return false;
}

/* =================================================================================================== */
function getHash(){
	var hash = window.location.hash.replace('#', '');
	return hash;
}

/* =================================================================================================== */
function notification(what, ttype, title){

	if(!ttype){ ttype="message"; }

	var theTitle = ttype;

	if(title &&  title!=''){ theTitle = ttype; }

	$('.notice').remove();

	what = decodeURIComponent(what);

	$('<div/>')
		.attr('id', 'dialog-holder-for-editing')
		.addClass('notice moz_round')
		.addClass(ttype)
		.html('<a href="javascript:;" onclick="$(this).closest(\'.notice\').fadeOut();" class="close"></a><div class="message_type">'+theTitle+'</div><div class="message_value">'+what+'</div>')
		.appendTo('body');

		if(ttype != "alert"){
			if(window.timeoutvar) clearTimeout(window.timeoutvar);
			window.timeoutvar = setTimeout( function(){
				$( '#dialog-holder-for-editing' )
				.fadeOut();
			}, 3000 );
		}
}

function includeModule(url, token, target, params){

	if(!params) params = {};
	params.ajax_include_module = true;
	params.token = token;
	$.ajax({
		url:url,
		type:'post',
		data:params,
		beforeSend: function(){
			if(target){
				if(params.append){
					$(target).append('<div style="margin:15px;"><strong>Loading...</strong></div>');
				}else{
					$(target).html('<div style="margin:15px;"><strong>Loading...</strong></div>');
				}
			}
		},
		success: function(data){
			if(CKEDITOR.instances){
				for(i in CKEDITOR.instances){
					CKEDITOR.remove(CKEDITOR.instances[i]);
				}
			}
			if(target){
				if(params.append){
					$(target).append(data);
				}else{
					$(target).html(data);
				}
			}
		}
	})
}

function modalIncludeModule(url, token, params){

	if(!params) params = {}
	params.token = token;
	params.ajax_include_module = true;
	$('<div/>')
		.attr('id', 'modal_'+token)
		.css('display', 'none')
		.load(url, params,function(){
			if(CKEDITOR.instances){
				for(i in CKEDITOR.instances){
					CKEDITOR.remove(CKEDITOR.instances[i]);
				}
			}

		})
		.dialog({
			modal: true,
			autoOpen: true,
			title: !params.title ? '' :params.title,
			width: !params.width ? 800 : params.width,
			height: !params.height ? 600 : params.height,
			close: function(){
				$(this).dialog( "destroy" );
				$(this).remove();
			}
		})
}



function reloadCurrentTab(target, params){
	var tab = $($(target).parents('.tabs_content').get(0)).parent();
	var index = $(tab).tabs('option', 'selected');
	$.validationEngine.closePrompt('.green_button');
	var url = $.data($('#'+tab.attr('id')+ ' a.add_hash').get(index), 'href.tabs');
	if(url.match(/#/)){
		url = url.split('#');
		if(url[0].match(/\?/)){
			url[0] += '&' + params;
		}else{
			url[0] += '?' + params;
		}
		url = url[0] + '#' + url[1];
	}else{
		if(url.match(/\?/)){
			url += '&' + params;
		}else{
			url += '?' + params;
		}
	}

	if(CKEDITOR.instances){
		for(i in CKEDITOR.instances){
			CKEDITOR.remove(CKEDITOR.instances[i]);
		}
	}

	$(tab).tabs('url', $(tab).tabs('option', 'selected'), url);
	$(tab).tabs('load', $(tab).tabs('option', 'selected'));
}


function reloadAjaxContent(target, url, token, params){

	if(typeof target == 'string'){
		target = $(target);
	}else{
		if($('#ajax_edit_here').length){

			target = $('#ajax_edit_here').next('.ajax_content');

		}else{

			target = $($(target).parents('.ajax_content').get(0));

		}
	}

	if(!url) url = $(target).attr('href');
	if(!token) token = $(target).attr('rel');

	if(CKEDITOR && CKEDITOR.instances){
		for(i in CKEDITOR.instances){
			CKEDITOR.remove(CKEDITOR.instances[i]);
		}
	}

	includeModule(url, token, target, params);

}


/*
function reloadAjaxContent(el, params){

	if(params){

		var target = params.target;
		var url = params.url;
		var token = params.token;

	}else{

		var target = $($(el).parents('.ajax_content').get(0));
		var url = $(target).attr('href');
		var token = $(target).attr('rel');
	}

	if(CKEDITOR.instances){
		for(i in CKEDITOR.instances){
			CKEDITOR.remove(CKEDITOR.instances[i]);
		}
	}

	includeModule(url, token, target);

}
*/

function showLoading(){
	$('<div class="loading_modal" style="text-align:center; padding:20px"><img src="'+SKIN_SITE+'images/loading.gif"></div>').dialog({
		width:100,
		height:100,
		modal:true,
		draggable:false,
		resizable:false,
		open: function(event, ui) { $(".ui-dialog-titlebar").hide(); }
	});
}

function hideLoading(){
	$('.loading_modal').destroy();
}

function go(url){
	window.location.href = url;
}




/*
 * Extension for adding query vars dynamically
 * - use $.setUrlVar( curentLink - required (SITE_LINK + currentPage['q'] ), varName, varValue ), e.g. onclick="$.setUrlVar( link, varName, varValue )"
 * - if varName already exists in the query string, its value will be updated
 * - else add it to the query string
 * - return the newly formed redirect link
*/
$.extend({
	getUrlKeys: function(){
		var keys = [], hash;
		var paramStart = window.location.href.indexOf('?') + 1;

		if( paramStart != 0 ){
			var hashes = window.location.href.slice( paramStart ).split('&');

			for(var i = 0; i < hashes.length; i++)
			{
				hash = hashes[i].split('=');
				keys.push( hash[0] );
			}
		}

		return keys;
	},

	getUrlVars: function(){
		var vars = [], hash;
		var paramStart = window.location.href.indexOf('?') + 1;

		if( paramStart != 0 ){
			var hashes = window.location.href.slice( paramStart ).split('&');

			for(var i = 0; i < hashes.length; i++)
			{
				hash = hashes[i].split('=');
				vars.push( hash[1] );
			}
		}

		return vars;
	},

	getUrlVar: function(name){
		return $.getUrlVars()[name];
	},

	setUrlVar: function( currentLink, key, value ){
		urlVars = $.getUrlVars();
		urlKeys = $.getUrlKeys();

		returnUrl = currentLink + '?';
		found = false;

		/*
		 * If you pass an empty value to enter in the array, it won't be inserted
		 * Furthermore, if it existed before, it will be removed
		 */
		for( var i = 0; i < urlKeys.length; i++ ){
			if( (urlKeys[ i ] == key && value == '') || urlKeys[ i ] == '' )
			{
				urlKeys.splice( i, 1 );
				urlVars.splice( i, 1 );
			}
		}

		/*
		 * Compose the actual link for redirection
		 */
		for( var i = 0; i < urlKeys.length; i++ ){
			if( urlKeys[ i ] == key ){
				urlVars[ i ] = value;
				found = true;
			}

			returnUrl += urlKeys[ i ] + '=' + urlVars[ i ];

			if( i < urlKeys.length - 1 )
				returnUrl += '&';
		}

		if( !found && value != '' ){
			if( urlKeys.length != 0 )
				returnUrl += '&';
			returnUrl += key + '=' + value;
			urlKeys.push( key );
			urlVars.push( value );
		}

		go( returnUrl );
	}
});


function showObject(obj){
	$.each( obj, function(i, e) {
	   alert('name='+ i + ' value=' +e + '\n');
	});
}

function showConsoleObject(obj){
	$.each( obj, function(key, value) {
	   console.log("The value of ", key, " is ", value);
	});
}

function loadFromHash(){
	var hash = window.location.hash;
	if(hash != '' && hash != '#'){
		$('a[href='+hash+']').trigger('click');
	}
}

function non_whitespace(e) {
	var keynum = (window.event) ? e.keyCode : e.which;
	if(keynum=='32') e.preventDefault();
	return (  keynum != 32 || keynum <= 13 || typeof keynum == 'undefined' ) || ( /\S/ ).test( String.fromCharCode(keynum) );
}

function getPreviewData(e, id, targ){

	if(id == 'form'){
		var form = $(targ).closest('form');
		var data = {
			'content' : $(form).find('textarea[name=content]').val(),
			'sidebar' : $(form).find('textarea[name=sidebar]').val()
		}
		data = $.param(data)
	}else{
		var data = 'data=' + encodeURIComponent($('#' + id).val());
	}

	$.ajax({
		type: 'POST',
		async: false,
		url: SITE_LINK . ADMIN_SEO,
		data: 'no_action=module-preview_content&' + data
	})

}

function number_format( number, decimals, dec_point, thousands_sep ) {
	// http://kevin.vanzonneveld.net
	// +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +     bugfix by: Michael White (http://crestidg.com)
	// +     bugfix by: Benjamin Lupton
	// +     bugfix by: Allan Jensen (http://www.winternet.no)
	// +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// *     example 1: number_format(1234.5678, 2, '.', '');
	// *     returns 1: 1234.57

	var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
	var d = dec_point == undefined ? "," : dec_point;
	var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
	var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;

	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

