/**
 * @author: Florin Muresan
 * @date: 05.03.2009
 * IE hack - the method 'indexOf' it is not defined in IE
 * this implementation aims for absolute compatibility with indexOf in Firefox
 * @changeLog:{
 * [adrian]:[28.07.2010] - added LoadImages and LoadDropdowns used for Network Page and My Groups
 * [bogdan]:[02.09.2010] - modified ValidateName to validate name with nordic characters
 * [adrian]:[05.10.2010] - added deleteAlbum
 * [adrian]:[11.03.2010] - added hideExistingObjects - used for search to add people in groups
 *	Network page
 * }
 */
if (!Array.prototype.indexOf)
{
	Array.prototype.indexOf = function(elt, from)
	{
		var len = this.length;

		var from = Number(arguments[1]) || 0;
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
		if (from < 0) from += len;

		for (; from < len; from++)
		{
			if (from in this && this[from] === elt) return from;
		}
		return -1;
	};
}

function redirectTo(newLocation)
{
	document.location = newLocation;
}
function ReloadPage()
{
	window.location.reload();
}
function displayLoadMsg()
{
	$.achtung({message: _("Loading")+"...", icon: "ui-loading-icon", timeout: 0, disableClose: true});
}
function displaySaveMsg()
{
	$.achtung({message: _("Saving")+"...", icon: "ui-loading-icon", timeout: 0, disableClose: true});
}
function hideLoadMsg()
{
	$('.achtung').achtung('close');
}
function hideSaveMsg()
{
	$('.achtung').achtung('close');
}
function formatDate(date)
{
	var m_names = new Array(_("Jan"), _("Feb"), _("Mar"),
						_("Apr"), _("May"), _("Jun"), _("Jul"), _("Aug"), _("Sep"),
						_("Oct"), _("Nov"), _("Dec"));
	var myDate = new Date( date);
	var day = myDate.getMonth()+1;
	var month = myDate.getDate()-1;
	var formatedDate = '';
	if (day < 10)
		formatedDate = '0'+day;
	else formatedDate = day;
	formatedDate = formatedDate + ' ' + m_names[month] + ', ' + myDate.getFullYear();
	return formatedDate;
}

function IsFunction(command)
{
	if ((command !== undefined) && (command !== null))
	{
		var commandName = command.substring(0,command.indexOf('('));
		return eval('typeof ' + commandName) == 'function';
	}
	else
		return false;
}

function EvalCommand(command)
{

	if (IsFunction(command))
		eval(command);
}

function ParseReturn (returnData, errorDivSelector, callBack)
{
	if (returnData['result'] == 1)
	{
		if (returnData['jsActions'] !== undefined)
		{
			var actionCount = returnData['jsActions'].length
			for (var i = 0;i < actionCount; i++)
				EvalCommand(returnData['jsActions'][i])
		}
	}
	else
	{
		if (returnData['error'] !== undefined)
		{

			if (errorDivSelector !== undefined)
				$(errorDivSelector).html(returnData['error']);
			else {
				var container = $('#_mainErrorDiv')

				container
					.find(".mc")
					.html(returnData['error']);

				container.slideDown().wait( 2000, function () {
					container.slideUp();
				});
			}
		}
	}
	hideLoadMsg();
	hideSaveMsg();
}

$.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            var check = false;
            var re = new RegExp(regexp);
            return this.optional(element) || re.test(value);
        },
		_("Please check your input")+"."
);

function addslashes(str)
{
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\0/g,'\\0');
	return str;
}
function stripslashes(str)
{
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\0/g,'\0');
	str=str.replace(/\\\\/g,'\\');
	return str;
}
function ValidateDate(date)
{
	 var datePattern = /^([0]?[1-9]|[12][0-9]|3[01])[/]([0]?[1-9]|[1][012])[/](18|19|20)\d\d$/;
	 return date.match(datePattern);
}

var lastHash = '';

function PollHash(callBack)
{
	if(lastHash !== location.hash)
	{
		lastHash = location.hash;
		callBack;
	}
}
function BreakHash()
{
	if (window.location.hash !== undefined)
	{	var brokenHash = new Object();
		var paramPairs = window.location.hash.slice(1).split('/');
		var param;
		$.each(paramPairs, function(i, val)
			{
				param = val.split('?');
				brokenHash[param[0]] = param[1];
			})
		return brokenHash;

	}
	return null;
}

function SetHash(paramPairs)
{
	var hashArray = array();
	$.each(paramPairs, function(i, val)
			{
				hashArray.push(param.join('?'));
			});
	window.location.hash = '#' + hashArray.join('/');
}
function CenterAndScale(img)
{
	var imgO = $(img);
	var parent = imgO.parent();

	var	scale = 0;
	var newWidth;
	var newHeight;
	if (imgO.width() < parent.width() && imgO.height() < parent.height())
	{
		scale = imgO.width() / parent.width();
		imgO.css({ "margin-top" : (parent.height() - imgO.height())/2 + "px"});
	}
	//portrait
	else if (parent.width()/parent.height() > imgO.width()/imgO.height())
	{

		scale = imgO.height() / parent.height();
		imgO.height(parent.height());
	}
	//landscape
	else
	{
		scale = imgO.width() / parent.width();
		imgO.css({"width" : parent.width() + "px"});
		imgO.css({ "margin-top" : (parent.height() - imgO.height())/2 + "px"});
	}
	imgO.data("scale",scale).removeClass('centerAndScale').fadeIn(100);

}
function InitCenterAndScale()
{
	$("IMG.centerAndScale").load(
		function()
		{
			CenterAndScale(this);
		});
}; 





function ValidateEmail(email) {
	var validateEmails = new RegExp("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$");
	if ( validateEmails.test(email) )
		return  true;
	else
		return false;
}

function ValidateName(name) {
	var validateName = new RegExp("^[^(<>%^*!~;:#)]{1,40}$");
	if ( validateName.test(name) )
		return  true;
	else
		return false;
}

//used by Network Page and My Groups to load images of users
function LoadImages()
{
	$("IMG.centerAndScale").load(
	function()
	{
		CenterAndScale(this);
	});
}
//used by Network Page and My Groups to load option menu for users
function LoadDropdowns(parent)
{
	$('.dropdown',parent).each(function () {
		$(this).parent().eq(0).hoverIntent({
			interval: 300,
			timeout: 100,
			over: function () {
				var current = $('.dropdown:eq(0)', this);
				current.slideDown(100);
			},
			out: function () {
				var current = $('.dropdown:eq(0)', this);
				current.fadeOut(200);
			}
		});
	});
}

//delete an album, and redirect to a specified page
function deleteAlbum(albumId, page)
{
	$.post( "/deleteAlbum",
					{albumId: albumId},
					function(data){
						ParseReturn(data);
						if(page!='') redirectTo(page);
					},
					'json');
}

//Add new person in a group - do not show persons that are already in the group or persons
//without a name
function hideExistingObjects()
{
	//objects that are already in the system group
	var existingObj = new Array();
	$.each($('#'+selectedComponent+'-content').find('.objectId'),function(){
		existingObj.push($(this).val());
	})
	$.each($('#_objectList .searchObj'),function(){
		//check if object has name
		if($.trim($(this).find('.objName').html())=='')
		{
			$(this).addClass('hidden');
			return true;//go to next element
		}
		objectSearch = $(this).attr('itemid');
		$.each(existingObj,function(index,value){
			if(objectSearch == value)
			{
				$('#_objectList .searchObj[itemid='+objectSearch+']').addClass('hidden');
				return false;//go to next element
			}
		})
	})

	//if no objects shown, get message
	if($('#_objectList .searchObj:visible').length==0)
		$('#_msg2').removeClass('hidden');
}

//check if date is in the past
function dateInTheFuture(date)
{
	var d1 = new Date();
	var d1_year = d1.getFullYear();
	var d1_month = d1.getMonth()+1;
	var d1_day = d1.getDate();

	var d2 = date.split("/");
	var d2_year = parseInt(d2[2]);
	var d2_month = parseInt(d2[1]);
	var d2_day = parseInt(d2[0]);

	if	(d1_year > d2_year)//year
		return false
	else if	((d1_year == d2_year)
			&& (d1_month > d2_month))//month
		return false
	else if	(((d1_year == d2_year)
			&& (d1_month == d2_month))
			&& (d1_day > d2_day))//day
		return false
	else return true;
}

//receive date format yyyy/mm//dd and return date format dd/mm/yyyy
function DateYMDtoDateDMY(date, separator)
{
	date = date.split(separator);
	return (date[2][0]=='0'?date[2][1]:date[2])+'/'+
		(date[1][0]=='0'?date[1][1]:date[1])+'/'+
		date[0];
}
