// number functions
function get_randomnumber(number) {
	day = new Date();
	seed = day.getTime();
	return parseInt(((seed - (parseInt(seed/1000,10) * 1000)) /10) /100 * number + 1,10);
}

// date functions
function get_validdateutc(year, month, day, hour, minute) {
	if(check_date(year, month, day) === true) {
		var date = new Date(year-0, month-1, day-0, hour-0, minute-0);
		return Date.UTC(check_y2k(date.getYear()),date.getMonth(),date.getDate(),hour-0,minute-0,0);
	} else {
		return 0;
	}
}

// time functions
function convert_to24hour(hour, meridiem) {
	hour = hour-0;
	return hour = (meridiem == 'AM') ? ((hour == 12) ? 0 : hour) : ((hour != 12) ? hour + 12 : hour);
}

// url functions
function get_urlparameter(name, href) {
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec((href != null) ? href : window.location.href);
	if(results == null) return "";
	else return results[1];
}

// string functions
function trimString(string) {
	return string.replace(/^\s|\s$/g, "");
}

// check functions
function check_username(username, key) {
	var error = true;
	if(!/^[a-zA-Z0-9\_]+$/.test(username)) error = key+': '+lang.getLang('check_errors_username');
	return error;
}

function check_password(npassword, cpassword, strength, length, key) {
	var error = true;
	if(npassword != "" && cpassword != "") {
		if(npassword === cpassword) {
			error = check_passwordcomplexity(npassword, strength, length, key);
		} else {
			error = key+': '+lang.getLang('check_errors_passwordsnotmatch');
		}
	} else {
		error = key+': '+lang.getLang('check_errors_password');
	}
	return error;
}

function check_passwordcomplexity(password, strength, length, key) {
	var error = true;
	if(password.length >= length) {
		switch(strength) {
			case 1:
			if(!/^[A-Za-z0-9]+$/.test(password) || !/[A-Z]+/.test(password)) error = lang.getLang('check_errors_passwordstrengthstrong');
			break;
			
			case 2:
			if(!/^[A-Za-z0-9]+$/.test(password) || !/[A-Z]+/.test(password) || !/[a-z]+/.test(password) || !/[0-9]+/.test(password)) error = lang.getLang('check_errors_passwordstrengthverystrong');
			break;
			
			default:
			if(!/^[A-Za-z0-9]+$/.test(password)) error = lang.getLang('check_errors_passwordstrengthnormal');
			break;
		}
	} else {
		error = key+': '+lang.getLang('check_errors_passwordlength').replace('{0}', length);
	}
	return error;
}

function check_email(email, key) {
	var error = true;
	if(!/^[a-zA-Z0-9]+([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/.test(email)) error = key+': '+lang.getLang('check_errors_email');
	return error;
}

function check_number(number, key, notzero) {
	var error = true;
	var pattern = /^[\d]+(\.[\d]+)?$/;
	if(pattern.test(number)) {
		if(notzero && /^0+(\.0+)?$/.test(number)) error = key+': '+lang.getLang('check_errors_zero');
	} else {
		error = key+': '+lang.getLang('check_errors_number');
	}
	return error;
}

function check_percentage(number, key) {
	var error = true;
	if(number < 1 || number > 100) {
		error = key+': '+lang.getLang('check_errors_percentage');
	}
	return error;
}

function check_y2k(number) {
	return (number < 1000) ? number + 1900 : number; 
}

function check_date(year, month, day, key) {
	var error = true;
	var invaliddate = day + '/' + month + '/' + year;
	var date = new Date(year-0,month-1,day-0);
	var validdate = date.getDate() + '/' + (date.getMonth()+1) + '/' + check_y2k(date.getYear());
	if(invaliddate != validdate) {
		error = key+': '+lang.getLang('check_errors_date');
	}
	return error;
}

function check_dateandtimerange(startdatetime, enddatetime, key) {
	var error = true;
	if(startdatetime >= enddatetime) {
		error = key+': '+lang.getLang('check_errors_dateandtimerange');
	}
	return error;
}

function check_daterange(startdate, enddate, key) {
	var error = true;
	if(startdate > enddate) {
		error = key+': '+lang.getLang('check_errors_daterange');
	}
	return error;
}

function check_timerange(starttime, endtime, key) {
	var error = true;
	if(starttime >= endtime) {
		error = key+': '+lang.getLang('check_errors_timerange');
	}
	return error;
}

function check_filetype(name, filetypes, key) {
	var error = true;
    filetypes = filetypes.split(':');
	var pattern = '/^('+filetypes[1]+')$/';
	var filetype = name.split('.').pop().toLowerCase();
    while(filetypes[1].indexOf('|') != -1) filetypes[1] = filetypes[1].replace('|', ', ');
	if(!pattern.test(filetype)) error = key+': '+lang.getLang('check_errors_'+filetypes[0]+'filetype')+((filetypes[0] != '') ? filetypes[1]+lang.getLang('check_errors_filetypeallowed') : '');
	return error;
}

function check_domain(domain, key) {
    var error = true;
    if(!/^(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/.test(domain)) {
        error = key+': '+lang.getLang('check_errors_domain');
    }
	return error;
}

function check_path(path, key) {
    var error = true;
	if(!/^\/([a-zA-Z0-9]+([a-zA-Z0-9_\-\/])+([a-zA-Z0-9_\-])+)?$/.test(path)) error = key+': '+lang.getLang('check_errors_path');
    return error;
}

// is functions
function is_number(number) {
	return /^[\d]+$/.test(number);
}

function is_image(name) {
	return /\.(bmp|gif|jpg|png)$/.test(name.toLowerCase());
}

function is_media(name) {
	return /\.(swf|avi|flv|mov|mp4|mpg|wmv)$/.test(name.toLowerCase());
}

// browser functions

function open_browser(url, dialog) {
    var options = null;
    switch(dialog) {
        case 'select_image':
        options = {center:true, height:400, name:url.name, width:510};
        break;
        
        default:
        options = {center:true, height:400, name:url.name, width:650};
        break;
    }
    open_window(url, options);
}

// window functions

function open_window(url, options) {
	var args = '';
 
	if (typeof(options) == 'undefined') { var options = new Object(); }
	if (typeof(options.name) == 'undefined') { options.name = 'win' + Math.round(Math.random()*100000); }
 
	if (typeof(options.height) != 'undefined' && typeof(options.fullscreen) == 'undefined') {
		args += "height=" + options.height + ",";
	}
 
	if (typeof(options.width) != 'undefined' && typeof(options.fullscreen) == 'undefined') {
		args += "width=" + options.width + ",";
	}
 
	if (typeof(options.fullscreen) != 'undefined') {
		args += "width=" + screen.availWidth + ",";
		args += "height=" + screen.availHeight + ",";
	}
 
	if (typeof(options.center) == 'undefined') {
		options.x = 0;
		options.y = 0;
		args += "screenx=" + options.x + ",";
		args += "screeny=" + options.y + ",";
		args += "left=" + options.x + ",";
		args += "top=" + options.y + ",";
	}
 
	if (typeof(options.center) != 'undefined' && typeof(options.fullscreen) == 'undefined') {
		options.y=Math.floor((screen.availHeight-(options.height || screen.height))/2)-(screen.height-screen.availHeight);
		options.x=Math.floor((screen.availWidth-(options.width || screen.width))/2)-(screen.width-screen.availWidth);
		args += "screenx=" + options.x + ",";
		args += "screeny=" + options.y + ",";
		args += "left=" + options.x + ",";
		args += "top=" + options.y + ",";
	}
 
	if (typeof(options.scrollbars) != 'undefined') { args += "scrollbars=1,"; }
	if (typeof(options.menubar) != 'undefined') { args += "menubar=1,"; }
	if (typeof(options.locationbar) != 'undefined') { args += "location=1,"; }
	if (typeof(options.resizable) != 'undefined') { args += "resizable=1,"; }
 
	var win = window.open(url, options.name, args);
}

// display functions
function dspRequired(required) {
	var count = 0;
	var message = lang.getLang('errors_fieldsrequired') + "\n";
	for(var i=0; i<required.length; i++) {
		if(required[i] != "" || required[i] != null) {
			message = message + " - " + required[i] + "\n";
			count += 1;
		}
	}
	
	if(count > 0) {
		alert(message);
		return false;
	} else {
		return true;
	}
}


function dspErrors(errors) {
	var count = 0;
	var message = lang.getLang('errors_errorsoccured') + "\n";
	for(var i=0; i<errors.length; i++) {
		if(errors[i] != "" || errors[i] != null) {
			message = message + " - " + errors[i] + "\n";
			count += 1;
		}
	}
	
	if(count > 0) {
		alert(message);
		return false;
	} else {
		return true;
	}
}
