Enjin_Core = { };

Enjin_Core.MAX_ZINDEX = 2147483580;
Enjin_Core.floor = function(value, decimals) {
	var base = Math.pow(10, decimals)*1.0; 
	value *= base;
	value = Math.floor(value);
	value /= base;
	
	return value;
}

Enjin_Core.checkMaxChars = function(element, max_length) {
	var length = $(element).val().length;
	
	if (length >= max_length) {
		var trimmed = $(element).val().substr(0, max_length);
		$(element).val(trimmed);
		return false;
	}
	
	return true;
}


Enjin_Core.html_entity_decode = function(str) {
	var chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
	var random_separator;
	var code;
	var cp;
	
	do {
		code = '';
		for (i=0; i<5; i++) {
			cp = parseInt(Math.random() * chars.length);
			code += chars.substr(cp, 1);
		}
		
		random_separator = '@'+code+'@';
	} while (str.indexOf(random_separator) != -1);
	
	
	  var ta=document.createElement("textarea");
	  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(new RegExp("\n", 'g'), random_separator);	  
	  return ta.value.replace(new RegExp(random_separator, 'g'), "\n");
}

Enjin_Core.alert = function(title) {
	Enjin_Core.showMessagePopup({
		message: title,
		button_continue: 'Ok',
		scope: this,
		callback: function() {}, /* doing nothing on call since will be the swf upload part */
		cancel_click_document: true
	});
}

Enjin_Core._popup = null;
Enjin_Core.showMessagePopup = function(options) {
	var middle = 0;
	var _options = {
		top: null,
		message: '',
		button_continue: 'Ok'
	};
	jQuery.extend(_options, options);
	
	if (Enjin_Core._popup)
		Enjin_Core.cancelPopup();
	
	var html = '<div class="delete-comment element_popup hidden">\
		<div class="inner inner-message">\
			<span class="message">'+_options.message+'</span><br><br>\
			<div class="element_button"><div class="l"><!-- --></div><div class="r"><!-- --></div><input type="button" value="'+_options.button_continue+'" class="btncontinue"></div>\
		</div>\
	</div>';
	
	Enjin_Core._popup = $(html);
		
	Enjin_Core._popup.appendTo($(document.body));
	
	Enjin_Core.createPopupSeparator();
	Enjin_Core.placeAfterPopupSeparator(Enjin_Core._popup);
	
	
	//position	
	if (_options.top == null) {
		_options.top = $(window).scrollTop() + 
						($(window).height() - Enjin_Core._popup.height())*0.5;
	}	
	Enjin_Core._popup.css('top', _options.top);
	
	middle = ($(document.body).width() - Enjin_Core._popup.width())*0.5;	
	Enjin_Core._popup.css('left', middle);
	Enjin_Core._popup.show();
	
	Enjin_Core._popup.find('input[type=button].btncontinue').click(function(){
		Enjin_Core.cancelPopup();
	});
}

Enjin_Core.showPopup = function(options) {
	var middle = 0;
	var html_title = ''; 
	var _options = {
		top: null,
		message: '',
		message1: '',
		button_continue: 'Ok',
		scope: this,
		params: [],
		callback: function() {},
		callback_cancel: function() {},
		cancel_click_document: true
	};
	jQuery.extend(_options, options);
	
	if (Enjin_Core._popup)
		Enjin_Core.cancelPopup();
	
	var html = '<div class="delete-comment element_popup hidden">\
		<div class="inner">\
			<span class="message">'+_options.message+'</span><br><br>\
			|@extra@|\
			<div class="element_button"><div class="l"><!-- --></div><div class="r"><!-- --></div><input type="button" value="'+_options.button_continue+'" class="btncontinue"></div>&nbsp; or &nbsp;<a href="javascript:void(0);" class="cancel" onclick="Enjin_Core.cancelPopup(true)">Cancel</a>\
		</div>\
	</div>';
		
	if (_options.message1 != "") {
		html_title = '<span class="message1">'+_options.message1+'</span><br><br>';
	}
		
	html = html.replace('|@extra@|', html_title);
	
	//prepare base
	Enjin_Core._popup_separator = Enjin_Core.createPopupSeparator();
	
	Enjin_Core._popup = $(html); 
	Enjin_Core._popup.appendTo($(document.body));
	
	//position
	//position	
	if (_options.top == null) {
		_options.top = $(window).scrollTop() + 
						($(window).height() - Enjin_Core._popup.height())*0.5;
	}	
	Enjin_Core._popup.css('top', _options.top);
	
	
	middle = ($(document.body).width() - Enjin_Core._popup.width())*0.5;	
	Enjin_Core._popup.css('left', middle);
	Enjin_Core._popup.show();
	Enjin_Core._popup._options = _options;
	Enjin_Core.placeAfterPopupSeparator(Enjin_Core._popup);
	
	Enjin_Core._popup.find('input[type=button].btncontinue').click(function(){		
		_options.callback.apply(_options.scope, _options.params);
		Enjin_Core.cancelPopup();
	});
	
	if (_options.cancel_click_document) {
		$(document).one("click", function(event) {			
			Enjin_Core.cancelPopup(true);
		});
	}
	
	return Enjin_Core._popup;
}

Enjin_Core.createPopupSeparator = function() {
	if (Enjin_Core._popup_separator) {
		return Enjin_Core._popup_separator; //already created
	}
	var separator = $(document.createElement('div'));
	separator.css('width', $(document).width());
	separator.css('height', $(document).height());
	separator.css('z-index', Enjin_Core.MAX_ZINDEX);
	separator.addClass("s_popup-canvas-separator");
	separator.appendTo($(document.body));
	$(window).bind('resize', function() {
		separator.css('width', $(document).width());
		separator.css('height', $(document).height());		
	});
	
	Enjin_Core._popup_separator = separator;	
	return separator;
}

Enjin_Core.placeAfterPopupSeparator = function(el) {
	el = $(el);
	el.css('zIndex', Enjin_Core.MAX_ZINDEX+1);
	el.appendTo($(document.body));
}

Enjin_Core.removePopupSeparator = function() {
	if (Enjin_Core._popup_separator) {
		Enjin_Core._popup_separator.remove();
		Enjin_Core._popup_separator = null;
	}
}

Enjin_Core.cancelPopup = function(callback) {		
	if (callback && Enjin_Core._popup) {
		Enjin_Core._popup._options.callback_cancel.apply(
				Enjin_Core._popup._options.scope, 
				Enjin_Core._popup._options.params);		
	}
	
	if (Enjin_Core._popup) {
		Enjin_Core._popup.remove();
		Enjin_Core._popup = null;
	}
	
	Enjin_Core.removePopupSeparator();
}

Enjin_Core.limitText = function(limitField, limitNum) {
	if ($(limitField).val().length > limitNum) {
		$(limitField).val($(limitField).val().substring(0, limitNum));
	}
}

Enjin_Core.buttonState = function(button, state)
{
	if(state == false)
	{
		button.attr('disabled', 'disabled');
		button.parent().addClass('disabled');
	}
	else
	{
		button.removeAttr('disabled');
		button.parent().removeClass('disabled');
	}
}


Enjin_Core._anchorState = {};
Enjin_Core.prepareState = function() {
	var curl = document.location.toString();
	if (curl.match('#')) { // the URL contains an anchor
	  var anchors = curl.split('#');
	  anchors.shift();
	  
	  jQuery.each(anchors, function() {
		  if (this == '#')
			  return; //nothing to do
		  
		  var info = this.split('_');
		  var i=1;
		  var iid = info[1];
		  Enjin_Core._anchorState[iid] = {
				  params: {},
				  anchor: this
		  };
		  
		  
		  for (i=1; i<info.length; i++) {
			  var name = info[i];
			  var value = null; 
			  
			  if (i+1 < info.length)
				  value = info[i+1];
			  
			  Enjin_Core._anchorState[iid][name] = value;
		  }
		  
		  //simulate clicks on anchor		  
		  $('a[href="#' + this + '"]').click();
	  });
	}	
}
Enjin_Core.getState = function(module) {
	if ( Enjin_Core._anchorState[module] ) {
		return Enjin_Core._anchorState[module];
	}
	
	return null;
}

Enjin_Core.disableButton = function(input, seconds) {
	function reenableButton()
	{
		$(input).removeAttr('disabled');
		$(input).parent().removeClass('disabled');
	}
	
	$(input).attr('disabled', true);
	$(input).parent().addClass('disabled');
	setTimeout(reenableButton, seconds*1000);
}

/*
 * Dropdown Menu
 */
Enjin_Core.dd_timeout = 500;
Enjin_Core.dd_closetimer = 0;
Enjin_Core.dropdownMenu = function(items, button) {
	Enjin_Core.dd_canceltimer()
	$('.element_dropdown_menu').remove();
	
	var html = '<div class="element_popup element_dropdown_menu">\
		<div class="inner">\
			<ul>';
	
	for(i in items) {
		var target = '';
		if(items[i][2] == 1) target = ' target="_blank"'; 
		html += '<li><a href=\"' + items[i][1] + '\"' + target + '>' + items[i][0] + '</a></li>';
	}
	
	html += '</ul>\
		</div>\
	</div>';
	
	var popup = $(html);
	popup.css({'top': $(button).offset().top + $(button).height(), 'left': $(button).offset().left});
	popup.bind('mouseleave', function(e){
		Enjin_Core.dd_timer();
	});
	popup.bind('mouseenter', Enjin_Core.dd_canceltimer);
	
	$(button).unbind('mouseleave');
	$(button).bind('mouseleave', function(e){
		if(!(e.pageX > $(button).offset().left
		&& e.pageX < $(button).offset().left + $(button).width()
		&& e.pageY > $(button).offset().top)) Enjin_Core.dd_timer();
	});
	
	$('body').prepend(popup);
}
Enjin_Core.dd_close = function() {
	$('.element_dropdown_menu').remove();
}

Enjin_Core.dd_timer = function() {
	Enjin_Core.dd_closetimer = window.setTimeout(Enjin_Core.dd_close, Enjin_Core.dd_timeout);
}
Enjin_Core.dd_canceltimer = function() {
	if(Enjin_Core.dd_closetimer) {
		window.clearTimeout(Enjin_Core.dd_closetimer);
		Enjin_Core.dd_closetimer = null;
	}
}