/**
 * @author shankar.sabapathy
 */
var field_ids = {
    user: [['register_email', '[Registered Email]'],'register_password',['register_password_text', 'Minimum 8 Characters'], 're_password', 'first_name', 'last_name', ['cert_name', '[To be displayed in Certificate]'], ['dob_date', 'DD'], ['dob_month', 'MM'], ['dob_year', 'YYYY'], 'gender', 'user_categories_id', 'phone', 'website', 'address1', 'city', 'state', 'zip', 'country'],
	login_user: [['login_email', '[Registered Email]'],'login_password',['login_password_text', 'Minimum 8 Characters']],
	app_user: [['useremail', '[Registered Email]'],'password',['password_text', 'Minimum 8 Characters'],['forget_email', '[Registered Email]']],
	payment:['card_name','card_no','exp_date','year','verify_no','country','address1','city','state','zip','phone'],
	activation_invite:[['activation_code','Enter Activation Code']],
    end: 0
}
var valid = {
    datev: /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/,
    text: /^[a-zA-Z0-9\ \$\_\-\~\:\,\.\&\+\*\/\\]+$/i,
	search_text: /[\%\_]+$/i,
    fed_id_first_part: /^[0-9]{2}$/i,
    fed_id_second_part: /^[0-9]{7}$/i,
    alpha: /^[a-zA-Z0-9\-\*\&\+\~\_\.\,\/ ]+$/i,
    address: /^[a-zA-Z0-9\ \$\_\-\~\:\,\.\&\+\*\#\(\)\/\\]+$/i,
    onlyText: /^[a-zA-Z]+$/i,
    zipcode: /^\d{5}$|^\d{5}-\d{4}$/i,
    zipcode1: /^\d{4}$/i,
    phone: /^\(?[0-9]\d{2}[\)]?\s?\d{3}[\s\-]?\d{4}$/i,
    email: /^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i,
    url: /^(http:\/\/)?(www\.)?([A-Za-z0-9\.-]{3,}\.[A-Za-z]{3})/,
    num: /^[0-9]+$/i,
    num_dec: /^[0-9]{1,}(\.\d{1,3})?$/i, // ? for optional
    email: /^[a-zA-Z]*[\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9]+[\w\.-]*[a-zA-Z0-9]*\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/i,
    number_cnt: /^([1-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)?$/i,
    end: 0
};
function id_to_object(obj){
    var the_obj;
    if (typeof obj == "string") {
        the_obj = document.getElementById(obj);
    }
    else {
        the_obj = obj;
    }
    return the_obj;
}

function get_fields_object(id_name, form_name){
    var obj_val = new Array();
    var fields = field_ids[id_name];
    var field_name;
    for (var i = 0; i < fields.length; i++) {
    
        if (typeof fields[i] == 'object') {
            field_name = form_name + '_' + fields[i][0];
        }
        else 
            if (fields[i] != "") {
                field_name = form_name + '_' + fields[i];
            }
        obj_val[i] = id_to_object(field_name);
    }
    return obj_val;
}

function get_fields(id_name){
    return field_ids[id_name];
}

function get_default_value(id_name, field_name){
    var obj_val = new Array();
    var fields = field_ids[id_name];
    for (var i = 0; i < fields.length; i++) {
        if (typeof fields[i] == 'object') {
            if (field_name != '' && fields[i][0] == field_name) {
                return fields[i][1];
            }
            obj_val[i] = fields[i][1];
        }
    }
    return obj_val;
}

function isValidEmail(value){
    return !valid.email.exec(value);
}

function isValidUrl(value){
    return !valid.url.exec(value);
}

function isNumber(value){
    return !valid.num.exec(value);
}

function isValidPhone(value){
    if (!valid.num.exec(value)) {
        return 1;
    }
    else 
        if (value.length < 10 || value.length > 15) {
            return 1;
        }
}

function isValidZip(value){
    if (!valid.num.exec(value)) {
        return 1;
    }
    else 
        if (value.length < 5 || value.length > 10) {
            return 1;
        }
}

function isValidSearchText(value){
    return !valid.search_text.exec(value);
}

function isValidDate(dateStr, formate){
    // Checks for the following valid date formats:
    // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
    // Also separates date into month, day, and year variables
    
    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})(\ )(\d{1,2})(\:)(\d{1,2})(\:)(\d{1,2})$/;
	var m, d, y, h,min,s, month, day, year, hour, minite, sec;
	h=min=s=0;
	switch (formate) {
		case "%m-%d-%Y %H:%M:%S":
		case "%m/%d/%Y %H:%M:%S":
			datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})(\ )(\d{1,2})(\:)(\d{1,2})(\:)(\d{1,2})$/;
			m = 1;
			d = 3;
			y = 4;
			h = 6;
			min = 8;
			s = 10;
			break;
		case "%Y-%m-%d %H:%M:%S":
		case "%Y/%m/%d %H:%M:%S":
			datePat = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})(\ )(\d{1,2})(\:)(\d{1,2})(\:)(\d{1,2})$/;
			y = 1;
			d = 4;
			m = 3;
			
			h = 6;
			min = 8;
			s = 10;
			break;
		case "%Y-%d-%m %H:%M:%S":
		case "%Y/%d/%m %H:%M:%S":
			datePat = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})(\ )(\d{1,2})(\:)(\d{1,2})(\:)(\d{1,2})$/;
			y = 1;
			d = 3;
			m = 4;
			
			h = 6;
			min = 8;
			s = 10;
			break;
		case "%Y-%m-%d":
		case "%Y/%m/%d":
			datePat = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/;
			y = 1;
			d = 3;
			m = 4;
			break;
		case "%d-%m-%Y":
		case "%d/%m/%Y":
			datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
			m = 1;
			d = 3;
			y = 4;
			break;
	}
	
	//var datePat = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})(\ )(\d{1,2})(\:)(\d{1,2})(\:)(\d{1,2})$/;
    
    // To require a 4 digit year entry, use this line instead:
    // var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?
    if (matchArray == null) {
    
        return "Date is not in a valid format.";
    }
    month = matchArray[m]; // parse date into variables
    day = matchArray[d];
    year = matchArray[y];
	
	hours = h != 0 ? matchArray[h] : 0;
	minite = min != 0 ? matchArray[min] : 0;
	sec = s != 0 ? matchArray[s] : 0;
    if (month < 1 || month > 12) { // check month range
        return "Month must be between 1 and 12";
    }
    if (day < 1 || day > 31) {
        return "Day must be between 1 and 31";
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
        return "Month " + month + " doesn't have 31 days";
    }
    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day == 29 && !isleap)) {
            return "February " + year + " doesn't have " + day + " days";
        }
    }
	if (hours < 0 || hours > 24) {
        return "Hours must be between 1 and 24";
    }
	if (min < 0 || min > 59) {
        return "Minites must be between 0 and 59";
    }
	if (sec < 0 || sec > 59) {
        return "Seconds must be between 0 and 59";
    }
    return false;
}

function ErrorContactUs(f, errorInfo){
	
		// disabled all errors by default
		for (var i=0; i<myRules.length; i++)
		{
			var parts = myRules[i].split(",");
			var fieldName = parts[1];
			 //$('#'+fieldName + "_error").css("display", "none"); 
			  $('#'+fieldName + "_error").html("&nbsp;"); 
		}
	
		for (var i=0; i<errorInfo.length; i++)
		{
			var fieldName;
	
			// radio button
			if (errorInfo[i][0].type == undefined)
				fieldName = errorInfo[i][0][0].name;
			else
				fieldName = errorInfo[i][0].name;
					
		     $('#'+fieldName + "_error").css("display", "block");
			 $('#'+fieldName + "_error").html(errorInfo[i][1]);
			 $('#'+fieldName + "_error").slideDown("slow",0.2);
				
		}
	
		// normally, we'd do something like this: only return TRUE if there were no errors.
		// but this is just a demo. so it's commented out.
	 	return (errorInfo.length == 0) ? true : false;
	
	
}
