/* ------- General scripts --------------------------------------------------------------------------------------------------- */

//Confirm user action
function confirm_action(msg) {
	if (confirm(msg)) {
		return true;
	} else {
		return false;
	}
}

//Confirm user action then redirect to new url
function confirm_location(msg,url) {
	if (confirm(msg)) {
		window.location = url;
	} else {
		return false;
	}
}



//Show hide div
function show_hide(obj,target_id) {
	var objTarget = document.getElementById(target_id);

	if (objTarget.className == "hide") {
		objTarget.className = "";
		obj.className = "expander_shown";
	} else {
		objTarget.className = "hide";
		obj.className = "expander_hidden";
	}
}


//Enable Quote Form Details
function enable_quote() {
	var objSource = document.getElementById('wantdesign');
	var objTarget = document.getElementById('wantdesign_div');

	if (objSource.checked == true) {
		objTarget.className = "";
	} else {
		objTarget.className = "hide";
	}
}

//Only show "notify users" panel if there is text in the remarks section
function enable_notify() {
	var remarks = document.getElementById("remarks");
	var an_show = document.getElementById("announce_to_show");
	var an_hide = document.getElementById("announce_to_hide");

	if (remarks.value.length > 0) {
		an_show.className = "";
		an_hide.className = "hide";
	} else {
		an_show.className = "hide";
		an_hide.className = "pv1 center subtle";
	}
}

//Enable/Disable specific fields when editing main task details
function enable_detail_edit(obj,idtarget) {
	var el = document.getElementById("edit_"+idtarget);
	if (el == null) {
		return false;
	}
	if (obj.checked == true) {
		el.disabled = false;
		el.focus();
	} else {
		el.disabled = true;
	}
}



//Enable/Disable 'Edit Property' values
function change_property_value(objid, enable) {
	var id_change_prop  = document.getElementById(objid); //<select> box
	var id_cancel_prop  = document.getElementById("cancel_"  + objid); // <a> 'cancel change'
	var id_enable_prop  = document.getElementById("enable_"  + objid); // <a> 'change value'
	var id_current_prop = document.getElementById("current_" + objid); // <span> {current value}

	if (enable == true) {
		id_change_prop.className = "clean";
		id_change_prop.disabled = false;
		id_change_prop.focus();
		id_cancel_prop.className = "ph small subtle";
		id_enable_prop.className = "hide";
		id_current_prop.className = "hide";
	} else {
		id_change_prop.className = "hide";
		id_change_prop.disabled = true;
		id_cancel_prop.className = "hide";
		id_enable_prop.className = "ph small subtle";
		id_current_prop.className = "";

	}


}

function filter_remarks(objlink, remarktype) {
	var parentdiv   = document.getElementById("remarks_list");
	var els_both    = getElementsByClass('both',parentdiv,'div');
	var els_remark  = getElementsByClass('remark',parentdiv,'div');
	var els_details = getElementsByClass('details',parentdiv,'div');

	var all_remarks = getElementsByClass('remark_remarks',parentdiv,'div');
	var all_details = getElementsByClass('remark_details',parentdiv,'div');

	var no_remarks  = document.getElementById('no_filtered_remarks');



	//Both (remarks & details)
	if (remarktype == 'both') {
		no_remarks.className="hide";
		for (i=0; i < els_both.length; i++) {
			els_both[i].className = 'both';
		}

		for (i=0; i < els_details.length; i++) {
			els_details[i].className = 'details';
		}
		for (i=0; i < els_remark.length; i++) {
			els_remark[i].className = 'remark';
		}

		for (i=0; i < all_remarks.length; i++) {
			all_remarks[i].className = 'remark_remarks';
		}
		for (i=0; i < all_details.length; i++) {
			all_details[i].className = 'remark_details';
		}

	//Remarks
	} else if (remarktype == 'remark') {
		no_remarks.className = (els_remark.length == 0 && els_both.length == 0) ? "" : "hide";

		for (i=0; i < els_details.length; i++) {
			els_details[i].className = 'details hide';
		}
		for (i=0; i < els_remark.length; i++) {
			els_remark[i].className = 'remark';
		}

		for (i=0; i < all_remarks.length; i++) {
			all_remarks[i].className = 'remark_remarks';
		}
		for (i=0; i < all_details.length; i++) {
			all_details[i].className = 'remark_details hide';
		}


	//Details
	} else if (remarktype == 'details') {
		no_remarks.className = (els_details.length == 0 && els_both.length == 0) ? "" : "hide";
		for (i=0; i < els_details.length; i++) {
			els_details[i].className = 'details';
		}
		for (i=0; i < els_remark.length; i++) {
			els_remark[i].className = 'remark hide';
		}

		for (i=0; i < all_remarks.length; i++) {
			all_remarks[i].className = 'remark_remarks hide';
		}
		for (i=0; i < all_details.length; i++) {
			all_details[i].className = 'remark_details';
		}

	}

}



//Disable specific input/form field if value of selected item equals set amount
// @ objsource  = current element (this)
// @ objtarget  = id of target id/input/checkbox/etc
// @ disableval = if cur el.value == this value, disable target element
function disable_input (objsource,objtarget,disableval) {
	if (objsource.value == disableval) {
		document.getElementById(objtarget).disabled = true;
		if (document.getElementById(objtarget + "_label") != null) {
			document.getElementById(objtarget + "_label").className = "subtle"; //need to get class changer to do regex replacement, so we don't remove existing classes
		}
	} else {
		document.getElementById(objtarget).disabled = false;
	}

}

/* ------- Validation ------------------------------------------------------------------------------------------------------------- */

//Validate new task details
function validate_new_task(objform) {
	return confirm("Are you sure the details provided are correct? You will not be able to edit the details of this task.");
}


//Validate new user
function validate_new_user(objform) {
	if (!_strlen(objform.username.value,2,30)) {
		alert("Username must be 3-30 characters in length");
		objform.username.focus();
		objform.username.select();
		return false;
	} else if (!_strlen(objform.fullname.value,4,30)) {
		alert("Full name must be 4-30 characters in length");
		objform.fullname.focus();
		objform.fullname.select();
		return false;
	} else if (!_email(objform.email.value)) {
		alert("You must enter a valid email address");
		objform.email.focus();
		objform.email.select();
		return false;
	}


}


function validate_new_remark(objform) {
	return true;
}





//Return an array of elements with a specific class
//Dustin Diaz - http://www.dustindiaz.com/getelementsbyclass/
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}


//Show/hide 'customer correspondence' on quote/warranty pages
function show_hide_this_div(cur,elid,extra) {
	var eltohide = document.getElementById(elid);
	var new_class = (eltohide.className == "hide") ? "" : "hide";

	eltohide.className = new_class;

	if (new_class == "hide") {
		cur.innerHTML = "Show "+extra;
	} else {
		cur.innerHTML = "Hide "+extra;
	}
}






// ------- Standard Validation Subfunctions -------------------------------------------------------------------------------------
//currency
function _cash(Curr) {
    return /^\d{1,3}(,\d{3})*\.\d\d$|^\d+\.\d\d$/.test(Curr);
}
//within min/max string length
function _strlen(Curr,minvalue,maxvalue) {
    return (Curr.length > minvalue && Curr.length < maxvalue);
}
//number
function _isnum(St) {
    return !/\D/.test(St);
}

//Email validation
function _email(email) {
	invalid_chars = " /:,;"
	if (email == "") {
		return false;
	}
	// Check for invalid characters
	for (i=0; i<invalid_chars.length; i++) {
		badChar = invalid_chars.charAt(i)
		if (email.indexOf(badChar, 0) > -1) {
			return false;
		}
	}
	// Validate @ sign
	at_pos = email.indexOf("@", 1)
	if (at_pos == -1) {
		return false;
	}
	if (email.indexOf("@", at_pos+1) > -1) {
		return false;
	}
	// Validate dots
	period_pos = email.indexOf(".", at_pos)
	if (period_pos == -1) {
		return false;
	}
	if (period_pos+3 > email.length) {
		return false;
	}
	return true;
}

// ------------------------------------------------------------------------------------------------------------------------------

//JS equivelant of PHP's in_array() function
Array.prototype.find = function (s) {
	for(var i=0;i<this.length;i++)
		if(this[i] == s) return true;
		return false;
};




//Dynamically add a new <option> to the current <select> element
function select_add_value (objSelect) {
	if (objSelect.value != "addnewvaluenow")
		return false;
	var new_value = prompt("Enter a new value","");
	if (new_value == null || new_value == "") {
		objSelect.selectedIndex = 0
		return false;
	}

	options = document.createElement('option');
	options.setAttribute('value', "___" + new_value);
	options.setAttribute('selected', 'selected');
  	value = document.createTextNode("New: "+new_value);
  	options.appendChild(value);
  	objSelect.appendChild(options);
}
