/*
Created by: Mathew Carter 2008
Purpose: a universal js file to store custom functions for different tasks for purposes involved with BJB Global
*/


//display AJAX block for row expander in slx
var block_loadFile;
var block_loadID;
//rowID     : table row id 
//displayID : display id where you want the file to load
//file      : file to load
function displayBlock(rowID,displayID,file) {
	var rowElement = document.getElementById(rowID);
	var displayElement = document.getElementById(displayID);
	block_loadFile = file;
	block_loadID = displayID;
	if (rowElement.style.display == 'none') {
		rowElement.style.display = '';
		displayElement.innerHTML = '<img src="images/loading.gif">';
		setTimeout('ahahRequest(block_loadFile, block_loadID)','1000'); //improve user experience with 2 second delay
	} else {
		rowElement.style.display = 'none';
		displayElement.innerHTML = '';
	}
}
//display AJAX block for row expander in slx, use if you need to refresh a block with new data
//rowID     : table row id 
//displayID : display id where you want the file to load
//file      : file to load
function refreshBlock(rowID,displayID,file) {
	var rowElement = document.getElementById(rowID);
	var displayElement = document.getElementById(displayID);
	block_loadFile = file;
	block_loadID = displayID;
	
	rowElement.style.display = 'none';
	displayElement.innerHTML = '';
	
	rowElement.style.display = '';
	displayElement.innerHTML = '<img src="images/loading.gif">';
	setTimeout('ahahRequest(block_loadFile, block_loadID)','1000'); //improve user experience with 2 second delay
}
function getProductFields() {
	var productFields = document.getElementById('productFields').getElementsByTagName('input');
	var parseStr = new Array();
	for(var count=0;count<productFields.length-1;count++) {
		parseStr[count] = productFields[count].value;
	}
	return parseStr.join('|');
}
function popup(url, title, width, height) {
	if (title == "") {
		title = "PopupWindow";
	} else {
		title = title.replace(" ","");
	}
	if (width == "") {
		width = 600;
	}
	if (height == "") {
		height = 600;
	}	
	var popupLeft = (screen.width - width) / 2;
	var popupTop = (screen.height - height) / 2;
	winprops = 'height='+height+',width='+width+',top='+popupTop+',left='+popupLeft+',resizable=0,scrollbars=yes,location=0,status=0';	
	newwindow = window.open(url, title, winprops);
	if (window.focus) {
		newwindow.focus();
	}
	return false;
} 
function displayRow(rowID,onoff) {
	var rowElement = document.getElementById(rowID);
	if (onoff == 'on') {
		rowElement.style.display = '';
	} 
	if (onoff == 'off') {
		rowElement.style.display = 'none';
	}
}
function passStrength(status,password) {
	if ((typeof(status) == 'object') && (typeof(password) == 'object')) {
		var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
		var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
		var enoughRegex = new RegExp("(?=.{6,}).*", "g");

		if (password.value.length==0) {
			status.innerHTML = 'Type Password';
		} else if (false == enoughRegex.test(password.value)) {
			status.innerHTML = 'More Characters';
		} else if (strongRegex.test(password.value)) {
			status.innerHTML = '<span style="color:green">Strong!</span>';
		} else if (mediumRegex.test(password.value)) {
			status.innerHTML = '<span style="color:orange">Medium!</span>';
		} else {
			status.innerHTML = '<span style="color:red">Weak!</span>';
		}
	}
}
function checkInput(element, classNormal, classBlank, inputText) {
	if (typeof(element) == 'object') {
		if (element.value.length == 0) {
			element.className = classBlank;
			element.value = inputText;
		} else {
			element.className = classNormal;
		}
	}
}
var ajax_validator;
function validate(field1, field2, response_id, validation_type, check_for_empty, php_processor) {
	//ahahRequest(url, target, method, action, params)

	if (php_processor != null) {
		ajax_validator = getNewXmlHttpRequest();
		ajax_validator.open(method,url,true);
		ajax_validator.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		ajax_validator.onreadystatechange = function() {validateResponse(field1, field2, response_id, validation_type, check_for_empty, 'TRUE')};
		ajax_validator.send(params);
	} else {		
		validateResponse(field1, field2, response_id, validation_type, check_for_empty, 'FALSE');
	}
}
function parenName(ref) {
	ok=0; // it's just to start the loop, we don't use it to get out.
	if (typeof(ref) == 'object') {
		//alert('aaaaa'+typeof(ref));
		while (!ok)	{
			ref = ref.parentNode;
			if (ref.nodeType==1) { //check that the node is a tag, not text (type=3)
				if (String(ref.nodeName)=="DIV") {
					return ref.id;
				}
				if (String(ref.nodeName)=="BODY") {
					return 'bb';
				}
			}
		}
	}
	return 'bb';
}
function validateResponse(field1, field2, response_id, validation_type, check_for_empty, waiting_for_ajax) {
	var response = 'FALSE';
	var function_response = new Array();
	//alert(waiting_for_ajax);
	if (waiting_for_ajax == 'TRUE') {
		if (ajax_validator.readyState == 4) {
			if (ajax_validator.status == 200) {
				response = ajax_validator.responseText;
				//alert(response);
			}
		}
	} else {
		//alert(validation_type);
		//alert(check_for_empty);
		if (check_for_empty == 'TRUE') {
			if (field1.value.length == 0) {
				//alert(field1.value.length);
				function_response['perfect'] = 'FALSE';
				function_response['message'] = 'This field can not be blank';
			} else {
				function_response['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
				function_response['perfect'] = 'TRUE';
			}
		} 
		//alert(function_response['perfect']);
		if (field1.value.length > 0) {
			if (function_response['perfect'] != 'FALSE') {
				switch (validation_type) {
					case 'TEXT' : function_response = validate_text(field1.value); break;
					case 'NOSWEAR' : function_response = validate_noswear(field1.value); break;
					case 'EMAIL' : function_response = validate_email(field1.value); break;
					case 'URL' : function_response = validate_url(field1.value); break;
					case 'PHONE' : function_response = validate_phone(field1.value); break;
					case 'NUMBERS' : function_response = validate_numbers(field1.value); break;
					case 'PASSWORD1' : function_response = validate_password1(field1.value,field2.value); break;
					case 'PASSWORD2' : function_response = validate_password2(field1.value,field2.value); break;
					default: function_response['perfect'] = 'TRUE'; break;
				}
			}
		} else {
			if (check_for_empty == 'FALSE') {
				function_response['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
				function_response['perfect'] = 'TRUE';
			}
		}
	}
	var parent_element=document.getElementById(response_id);
	var divtitle = parent_element.getElementsByTagName('div')[0];
	var divinput = document.getElementById(response_id+'_input');
	var imgtag = '<img id="img'+response_id+'" style="padding-right:10px" src="http://www.crankit.com.au/images/error_bang.gif">';
	var imgelement = document.getElementById('img'+response_id);
	
	//alert(parent_element.getElementsByTagName("div").length);
	//alert(function_response);
	if (function_response['perfect'] == 'FALSE') {
		field1.className = 'field_error';
		parent_element.className = 'fieldbk_error';
		divtitle.className = 'title_error';
		divinput.className = 'input_error';
		divinput.focus();
		//alert(imgelement);
		if (imgelement != null) {
			removeElementById('img'+response_id);
		}		
		divtitle.innerHTML = imgtag + divtitle.innerHTML;
	} else {
		//alert(imgelement);
		if (imgelement != null) {
			removeElementById('img'+response_id);			
		}		
		field1.className = 'field_good';
		parent_element.className = 'fieldbk_good';
		divtitle.className = 'title_good';
		divinput.className = 'input_good';
	}
	
	//Add message response
	//alert('msg'+response_id);
	removeElementById('msg'+response_id);
	//var error_msg = document.createElement("div");
	//alert(escapeHTML(function_response['message']));
	//error_msg.setAttribute("id", "msg" + response_id);
	//error_msg.setAttribute("class", "field_error_msg");
	//error_msg.innerHTML = function_response['message'];
	var error_msg;
	try {
		//error_msg = document.createElement('<div id="msg' + response_id + '" class="field_error_msg">' + function_response['message'] + '</div>');
		error_msg = document.createElement("div");
		error_msg.id = "msg" + response_id;
		error_msg.className =  "field_error_msg";
		error_msg.innerHTML = function_response['message'];
	} catch (e) {
		error_msg = document.createElement("div");
		error_msg.setAttribute("id", "msg" + response_id);
		error_msg.setAttribute("class", "field_error_msg");
		error_msg.innerHTML = function_response['message'];
	}		
	parent_element.appendChild(error_msg);
}
function escapeHTML(someText) {
  var div = document.createElement('div');
  var text = document.createTextNode(someText);
  div.appendChild(text);
  return div.innerHTML;
}
function removeElementById(id) {
    var el = document.getElementById(id);
	if (el != null) {
		el.parentNode.removeChild(el);
	}
}
var global_total_elements = 0;
var global_form_element;
function focusElements() {
	var elements = 1;
	while (document.getElementById('field'+elements) != null) {
		inputFields = getInputs(document.getElementById('field'+elements));
		for(i=0;i<inputFields.length;i++) {
			inputFields[i].focus();
		}
		elements++;
	}
	global_total_elements = elements;
	//return elements;
}
function reset_form() {
	//alert(global_total_elements);
	if (global_total_elements > 0) {
		current_element = 0;
		for (i=1;i<=global_total_elements;i++) {
			if ((document.getElementById('imgfield'+i) != null) && (current_element == 0)) {
				current_element = i;
				//alert('here');
			}
		}
		if (current_element > 0) {			
			inputFields = getInputs(document.getElementById('field'+current_element));
			inputFields[0].focus();
		} else {
			global_form_element.submit();
		}
	} else {
		global_form_element.submit();
	}
}
function validate_submit(form) {
	global_form_element = form;
	focusElements();
	setTimeout("reset_form()",500);
	return false;
}
function getInputs(element) {
	return element.getElementsByTagName('INPUT');
}
function vvalidate_submit(form) {
	var returnvar = true;
	for(i=form.elements.length-1; i>=0; i--) {
		if (form.elements[i].nodeName == 'INPUT') {
			var input_element = form.elements[i];
			var parEl = (parenName(input_element));
			if (typeof(document.getElementById(parEl)) == 'object') {
				if (document.getElementById(parEl) != null) {
					var fieldid = parenName(document.getElementById(parEl));
					if (typeof(document.getElementById('img'+fieldid)) == 'object') {
						input_element.focus();
						returnvar = false;
					}
				}
			}
		}
	}
	return returnvar;
}
function validate_text(value) {
	var fnameRegxp = /[^a-zA-Z^ \t\r\n\f]/;
	var returnVal = new Array();
	//alert(fnameRegxp.test(value));
	if (fnameRegxp.test(value) == false) {
		returnVal['perfect'] = 'TRUE';
		returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
	} else {
		returnVal['perfect'] = 'FALSE';
		returnVal['message'] = 'Please enter valid text';
	}
	return returnVal;
}
function validate_noswear(value) {
	var swear_words_arr=new Array("fuck","cunt","shit","sex","piss");
	var swear_alert_count = 0;
	for(var i=0; i<swear_words_arr.length; i++)
	{
		for(var j=0; j<(value.length); j++)
		{
			if(swear_words_arr[i]==value.substring(j,(j+swear_words_arr[i].length)).toLowerCase())
			{
				swear_alert_count++;
			}
		}
	}
	var returnVal = new Array();
	//alert(fnameRegxp.test(value));
	if (swear_alert_count == 0) {
		returnVal['perfect'] = 'TRUE';
		returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
	} else {
		returnVal['perfect'] = 'FALSE';
		returnVal['message'] = 'Please no curse words';
	}
	return returnVal;
}
function validate_email(value) {
	var fnameRegxp = /^[a-zA-Z0-9._-]+@[a-z0-9-]+\.[.a-z0-9-]+(?::\d*)?/i;
	var returnVal = new Array();
	//alert(fnameRegxp.test(value));
	if (fnameRegxp.test(value) == true) {
		returnVal['perfect'] = 'TRUE';
		returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
	} else {
		returnVal['perfect'] = 'FALSE';
		returnVal['message'] = 'Please enter valid email';
	}
	return returnVal;
}
function validate_url(value) {
	var regxp = /[a-z0-9-]+\.[.a-z0-9-]+(?::\d*)?/i;
	var message = '';
	var returnVal = new Array();
	if (false == regxp.test(value)) {
		returnVal['message'] = 'Please enter valid URL';
		returnVal['perfect'] = 'FALSE';
	} else {
		returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
		returnVal['perfect'] = 'TRUE';
	}
	return returnVal;
}
function validate_phone(value) {
	// Remove spaces from the telephone number to help validation
	while (value.indexOf(" ")!= -1)
	{
		value = value.slice (0,value.indexOf(" ")) + value.slice (value.indexOf(" ")+1);
	}	
	// Remove hyphens from the telephone number to help validation
	while (value.indexOf("-")!= -1)
	{
		value = value.slice (0,value.indexOf("-")) + value.slice (value.indexOf("-")+1);
	}
	var regxp = /[^\d]/;
	var message = '';
	var returnVal = new Array();
	if (true == regxp.test(value)) {
		returnVal['message'] = 'Please enter valid number';
		returnVal['perfect'] = 'FALSE';
	} else {
		returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
		returnVal['perfect'] = 'TRUE';
	}
	return returnVal;
}
function validate_numbers(value) {
	var regxp = /[^\d]/;
	var message = '';
	var returnVal = new Array();
	if (true == regxp.test(value)) {
		returnVal['message'] = 'Please enter valid number';
		returnVal['perfect'] = 'FALSE';
	} else {
		returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
		returnVal['perfect'] = 'TRUE';
	}
	return returnVal;
}
function validate_password1(value1,value2) {
	var returnVal = new Array();
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var enoughRegex = new RegExp("(?=.{6,}).*", "g");
	var invalidRegex = new RegExp("[ \t\r\n\f]", "g");
	var message = '';
	
	if (true == invalidRegex.test(value1)) {
		message = 'Spaces are not valid in a password';
	} else if (false == enoughRegex.test(value1)) {
		message = 'Password must be atleast 6 characters in length';
		returnVal['perfect'] = 'FALSE';
	} else if (strongRegex.test(value1)) {
		message = '<span style="color:green">Strong Password!</span>';
	} else if (mediumRegex.test(value1)) {
		message = '<span style="color:orange">Average Password!</span>';
	} else {
		message = '<span style="color:red">Weak Password!</span>';
	}
	
	if ((value1 == value2) && (value1 != '')) {
		//message = message + '--matching!';
		if (returnVal['perfect'] != 'FALSE') {
			returnVal['perfect'] = 'TRUE';
		}
	} else {
		//if (value1 != '') message = message + '--non matching!';
		returnVal['perfect'] = 'FALSE';
	}
	returnVal['message'] = message;
	
	return returnVal;
}
function validate_password2(value1,value2) {
	var returnVal = new Array();
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var enoughRegex = new RegExp("(?=.{6,}).*", "g");
	var invalidRegex = new RegExp("[ \t\r\n\f]", "g");
	
	if (true == invalidRegex.test(value1)) {
		returnVal['message'] = 'Spaces are not valid in a password';
		returnVal['perfect'] = 'FALSE';
	} else if (false == enoughRegex.test(value1)) {
		returnVal['message'] = 'Password must be atleast 6 characters in length';
		returnVal['perfect'] = 'FALSE';
	} else {	
		if ((value1 == value2) && (value1 != '')) {
			returnVal['message'] = '<img src="http://www.crankit.com.au/images/tick.gif" width="12">';
			returnVal['perfect'] = 'TRUE';
		} else if (value1 != '') {
			returnVal['message'] = 'These password fields do not match';
			returnVal['perfect'] = 'FALSE';
		}
	}	
	return returnVal;
}
function tab(obj,chars,prevfield,nextfield, event) {
	var str;
	if ((obj.value.length >= chars) && (document.getElementById(nextfield) != null)) {
		str = obj.value;
		obj.value = str.substring(0,chars);
		document.getElementById(nextfield).focus();
		document.getElementById(nextfield).value = document.getElementById(nextfield).value;
	}
	//alert(event.keyCode);
	if ((obj.value.length <= 0) && (document.getElementById(prevfield) != null) && (event.keyCode != 9)) {
		obj.value = '';
		document.getElementById(prevfield).focus();
		document.getElementById(prevfield).value = document.getElementById(prevfield).value;
	}
}
function limit(obj,chars) {
	if (obj.value.length >= chars) {
		str = obj.value;
		obj.value = str.substring(0,chars);
	}
}