/*
	Common Scorptec JS functions
*/


//Close Message
function close_msg(o) {
	var m = $('msg');
	 m.destroy();
}

//Adv Search scripts
function advsearch_subs(obj) {
	if (obj.value != "") {
		document.getElementById("adv_search_options_subs").className="";
		document.getElementById("adv_subcat").disabled = false;
		document.getElementById("adv_man").disabled = false;

		makeRequest(obj.value);


	} else {
		document.getElementById("adv_search_options_subs").className="hide";
		document.getElementById("adv_subcat").disabled = true;
		document.getElementById("adv_man").disabled = true;
	}
}

function enableStoreSelect(){
	instock = document.getElementById("instock").checked;
	if (instock)
		document.getElementById("search_store").disabled = false;
	else
		document.getElementById("search_store").disabled = true;
	
}




var div = document.getElementById('container');

var handleSuccess = function(o){
	if(o.responseXML !== undefined){

		//Select tag (subcats) to be created
		if (document.getElementById("adv_subcat")) {
			var el_select = document.getElementById("adv_subcat");
			el_select.parentNode.removeChild(el_select);
		}
	    var el_select = document.createElement("select");
		el_select.setAttribute('name', 's');
		el_select.setAttribute('id', 'adv_subcat');


		//Setup default <option>
		option = document.createElement('option');
    	option.setAttribute('value', "");
    	option_value = document.createTextNode('- All Subcategories -');
    	option.appendChild(option_value);
    	el_select.appendChild(option);

    	//Select tag (mans) to be created
		if (document.getElementById("adv_man")) {
			var el_select_mans = document.getElementById("adv_man");
			el_select_mans.parentNode.removeChild(el_select_mans);
		}
	    var el_select_mans = document.createElement("select");
		el_select_mans.setAttribute('name', 'm');
		el_select_mans.setAttribute('id', 'adv_man');

		//Setup default <option>
		option = document.createElement('option');
    	option.setAttribute('value', "");
    	option_value = document.createTextNode('- All Manufacturers -');
    	option.appendChild(option_value);
    	el_select_mans.appendChild(option);





		//Load XML Document
	    var root = o.responseXML.documentElement;

		//Loop through XML to generate new <select> dropdowns for (subs)
		var children = root.getElementsByTagName("subcat");
	    for (j=0; j<children.length; j++) {
	    	option = document.createElement('option');
	    	option.setAttribute('value', children[j].getElementsByTagName('subid')[0].firstChild.nodeValue);
	    	option_value = document.createTextNode(children[j].getElementsByTagName('subname')[0].firstChild.nodeValue);
	    	option.appendChild(option_value);
	    	el_select.appendChild(option);
	    }

	    //Loop through XML to generate new <select> dropdowns for (mans)
		var children = root.getElementsByTagName("man");
	    for (j=0; j<children.length; j++) {
	    	option = document.createElement('option');
	    	option.setAttribute('value', children[j].getElementsByTagName('manid')[0].firstChild.nodeValue);
	    	option_value = document.createTextNode(children[j].getElementsByTagName('manname')[0].firstChild.nodeValue);
	    	option.appendChild(option_value);
	    	el_select_mans.appendChild(option);
	    }

	    //Add new <select> dropdowns to page
	    document.getElementById("subcatsgohere").appendChild(el_select);
	    document.getElementById("mansgohere").appendChild(el_select_mans);
	}
}

var handleFailure = function(o){
	if(o.responseText !== undefined){
	}
}

var callback = {
  success:handleSuccess,
  failure:handleFailure
}

function makeRequest(catid){
	var sUrl = "/ajax/get?action=advsearch&catid=" + catid;
	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
}





/* ------- General scripts --------------------------------------------------------------------------------------------------- */

//Confirm user action
function confirm_action(msg) {
	return (confirm(msg));
}

//Confirm user action then redirect to new url
function confirm_location(msg,url) {
	if (confirm(msg)) {
		window.location = url;
	} else {
		return false;
	}
}

//Add Firefox search engine
function addEngine(name,ext,cat,type)
{
    if ((typeof window.sidebar == "object") && (typeof window.sidebar.addSearchEngine == "function")) {
        window.sidebar.addSearchEngine(
            "http://www.scorptec.com.au/download/search/"+name+".src",
            "http://www.scorptec.com.au/download/search/"+name+"."+ext, name, cat
        );
    } else {
        alert("Sorry, you need a Mozilla-based browser to install a search plugin.");
    }
}

//Open popup window
function popup_win (url, win_name) {
	if (win_name != null){
		newwindow=window.open(url,win_name,'width=600,height=400,resizable=yes');
	} else {
		newwindow=window.open(url,'name','width=600,height=400,resizable=yes');
	}
	if (window.focus) {newwindow.focus()}
	return false; //this is required for accessibility - do not remove this line
}

/* ------- Validation ------------------------------------------------------------------------------------------------------------- */

//Check search term entered is valid length
function validate_search(objform) {
	var searchterm = objform.q;
	var success = _strlen(searchterm.value,0,30);

	if (success == false) {
		alert("Search term must be between 1 and 30 characters long");
		searchterm.focus();
		return false;
	}
}


//Validate details of advanced search
function validate_search_adv(objform) {
	return true;
}


//Validate login details are complete before submitting
function validate_login(login_form) {
	if (!_email(login_form.log_email.value)) {
		alert("Email address is invalid, please try again.");
		login_form.log_email.focus();
		login_form.log_email.select();
		return false;
	} else if (login_form.log_password.value == "") {
		alert("Password cannot be left blank, please enter a password.");
		login_form.log_password.focus();
		return false;
	}
	return true;
}




//Validate Forgot Password email address
function validate_forgot(login_form) {
	if (!_email(login_form.log_email.value)) {
		alert("Email address is invalid, please try again.");
		login_form.log_email.focus();
		login_form.log_email.select();
		return false;
	}
	return true;
}




//Validate product Enquiry (from main product pages)
function validate_prod_enq() {
	var cname = document.getElementById("cust_name");
	var email = document.getElementById("cust_eml");
	var cenq  = document.getElementById("cust_enquiry");
	var msg   = "";

	if (!_strlen(cname.value,1,40)) {
		msg = "You must provide your name.";
		cname.focus();
	}
	if (!_email(email.value)) {
		msg += "\nYou must provide a valid email address for us to respond to your enquriy.";
		email.focus();
	}
	if (!_strlen(cenq.value,1,2000)) {
		if (cenq.value.length > 2000) {
			msg = "The comments or questions you have written appear to be too long to be sent by email. You will need to call Scorptec to discuss your product enquiries.";
		} else {
			msg += "\nPlease enter your questions or comments.";
		}
		cenq.focus();
	}
	if (msg) {
		alert(msg);
		return false;
	} else {
		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 'product descriptions' on custom system builder page
function system_desc_showhide(action) {
	var realaction = (action == null) ? "hide" : "canbehidden";
	var searchfor  = (action == null) ? "canbehidden" : "hide";
	var nodestohide = getElementsByClass(searchfor,document.getElementById("custom_system_components"),"div");

	for (i=0; i < nodestohide.length; i++) {
		nodestohide[i].className = realaction;
	}

	if (realaction == "hide") {
		document.getElementById("hideproddesc1").className = "hide";
		document.getElementById("hideproddesc2").className = "hide";
		document.getElementById("showproddesc1").className = "";
		document.getElementById("showproddesc2").className = "";
	} else {
		document.getElementById("hideproddesc1").className = "";
		document.getElementById("hideproddesc2").className = "";
		document.getElementById("showproddesc1").className = "hide";
		document.getElementById("showproddesc2").className = "hide";
	}
}

//Show/hide 'system components' on checkout cart details
function system_desc_showhide_cart(action) {
	var realaction = (action == null) ? "hide" : "canbehidden";
	var searchfor  = (action == null) ? "canbehidden" : "hide";
	var nodestohide = getElementsByClass(searchfor,document.getElementById("checkout_cart_details"),"tr");

	for (i=0; i < nodestohide.length; i++) {
		nodestohide[i].className = realaction;
	}

	if (realaction == "hide") {
		document.getElementById("hide_sys_items").className = "hide";
		document.getElementById("show_sys_items").className = "";
	} else {
		document.getElementById("hide_sys_items").className = "";
		document.getElementById("show_sys_items").className = "hide";
	}
}




//Show/hide 'customer correspondence' on quote/warranty pages
function show_hide_div(action,divid) {
	var new_class = (action == 1) ? "hide" : "";

	document.getElementById(divid).className = "customer_correspondence " + new_class;

	if (new_class == "hide") {
		document.getElementById(divid+"_show").className = "";
		document.getElementById(divid+"_hide").className = "hide";
	} else {
		document.getElementById(divid+"_show").className = "hide";
		document.getElementById(divid+"_hide").className = "";
	}
}



//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;
	}
}






//Show full description for payment/delivery checkout pages
function delivery_method(divid) {
	var cur_class = document.getElementById(divid).className;
	var new_class = (cur_class == "delivery_method_hide") ? "delivery_method_show" : "delivery_method_hide";
	var new_link  = (cur_class == "delivery_method_hide") ? "Hide" : "Show";

	document.getElementById(divid).className = new_class;
	document.getElementById(divid+"_link").innerHTML = new_link +" Full Description";

}

//Switch description layers for payment/delivery checkout pages
function switch_layers( displayLayerName) {
	if ( document.getElementById ) {
		for (i = 0; i<layers.length; i++) {
			var obj_layer = document.getElementById( layers[i] );
			if (layers[i] == displayLayerName) {
				obj_layer.className = "checkout_delivery_options";
			} else {
				obj_layer.className = "checkout_delivery_options hide";
			}
		}
	}
}



/*
// ------- Checkout functions ---------------------------------------------------------------------------------------------------
<script type="text/javascript">
	<!--//
	//Validates the quote only fields to ensure the customer has submitted proper requirements for their quote
	function validateQuoteForm(frm){
		var error = false;
		var msg = "";

		//Have they selected at least one action request?
		var chkName = "fld_questions[]";
		len = frm.elements.length;
		var i=0;
		var countdropdowns = 0;
		for( i=0 ; i<len ; i++) {
			if ((frm.elements[i].name==chkName) && (frm.elements[i].checked==1))
				countdropdowns++;
		}
		if (countdropdowns == 0) {
			msg += "Please select at least one Action Request for this quote.\n\n";
			error = true;
		}

		//Have they entered a timeframe estimate for this quote?
		if (document.checkout_form.fld_order_eta.value == "") {
			msg += "Please enter an approximate timeframe for when you would purchase this quote.\n\n";
			error = true;
		}

		//Does the custom need to enter 'other comments' if they ticked the 'Other Requests' checkbox?
		if (document.getElementById('id_other').checked == true) {
			if (document.checkout_form.fld_comments.value.length < 5) {
				msg += "Please elaborate on what other requests you may have for this quote.\n\n";
				error = true;
			}
		}

		if (error == true) {
			alert(msg)
			return false;
		} else
			return true;
	}

	-->
</script>



*/



//Switch description layers for pickup store option in checkout pages
function switch_store_layers( displayLayerName) {
	if ( document.getElementById ) {
		for (i = 0; i<store_layers.length; i++) {
			var obj_layer = document.getElementById( store_layers[i] );
			if (store_layers[i] == displayLayerName) {
				obj_layer.className = "pickup_store_options";
			} else {
				obj_layer.className = "pickup_store_options hide";
			}
		}
	}
}


// ------- System functions -----------------------------------------------------------------------------------------------------

//Update Preconfigured System price (after applying upgrade cost)
function update_system_total() {
	var def = parseInt(document.getElementById("def_total").value);
	var els = document.getElementsByTagName("select");
	var elsLen = els.length - 1;
	for (i = 0, j = 0; i < elsLen; i++) {
		cost = els[i].value.split("|");
		def = def + parseInt(cost[3]);
	}
	def = def.toFixed(2);
	document.getElementById("running_system_total").innerHTML = "$" + def;

}


// ------ Set software install when sofware added -------------------------------------------------------------------------------

function update_software_install(who) {
	if (document.getElementById("49") == null){
		return false;
	}
	if (who.selectedIndex == 0){
		document.getElementById("49").selectedIndex = 0;
	}else{
		document.getElementById("49").selectedIndex = 1;
	}
}




// ------- 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;
}


function check_state(postcode, state, hidden_state){
	postcode = postcode.value;
	if (postcode <= 3207 && postcode >= 3000 || postcode == 3800){
		state.value = "VIC-METROPOLITAN";
		hidden_state.value = "VIC-METROPOLITAN";
		state.disabled = "true";
	}
	else if (postcode >3207 && postcode <= 3999 && postcode != 3800) {
		state.value = "VIC-COUNTRY";
		hidden_state.value = "VIC-COUNTRY";
		state.disabled = "true";
	}
	else{
		state.disabled = "";
	}

}


// ------------------------------------------------------------------------------------------------------------------------------

/*
//Get value of radio buttons
function _getCheckedValue(radioObj) {
	if(!radioObj)
		return false;
	user_input = false;

	for (i=0; i<radioObj.length; i++) {
		if (radioObj[i].checked) {
			user_input = radioObj[i].value;
		}
	}
	return user_input;
}
*/
//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;
};



// ------- Account functions -----------------------------------------------------------------------------------------------------
function account_ccv_submit_check(form) {
	if (form.fld_verify_amount.value==0 || form.fld_verify_amount.value=='') {
		alert("Amount is not entered, please try again!!");
		form.fld_verify_amount.focus();
		form.fld_verify_amount.select();
		return false;
	}
	else {
		return confirm('Are you sure the amount you have entered is correct?');
	}

}


function show_your_price(yr_divId, org_divId, rownum){
	var yr = getObject(yr_divId);
	var org = getObject(org_divId);

	if (yr.style.display == 'block'){
		yr.style.display = 'none';
		org.style.display = 'block';
		org.style.textDecoration = 'none';
	} else {
		yr.style.display = 'block';
		org.style.textDecoration = 'line-through';
	}
}


/* =Update Shopping Cart Quantity
 * var s	select elements
 * var p	prdid for this item
--------------------------------------------- */
function update_qty(s,p) {
	var createnew = true;
	if (s.value == "specify") {


		//Get new quantity from user
		while (isNaN(n)) {
			var n = prompt("Enter your desired quantity");
		}

		if (n > 0) {
			//Check for value in select
			$(s).getChildren().each(function(el, i) {
				if(el.getProperty('value') == n){
					el.setProperty('selected','selected');
					createnew = false;
				} else {
					el.removeProperty('selected');
				}
			});

			//Add new element
			if (createnew == true) {
				var o = new Element('option', {
					'value': n,
					'selected': 'selected'
				});
				o.appendText(n);
				o.inject($(s),'bottom');
			}

			//update hidden input
			$('prev_'+p).set('value',n);

			var sub = true;

		} else {
			//User cancelled - select previous value
			$(s).getChildren().each(function(el, i) {
				if(el.getProperty('value') == $('prev_'+p).get('value')){
					el.setProperty('selected','selected');
				} else {
					el.removeProperty('selected');
				}
			});
		}
	} else {
		$('prev_'+p).set('value',$(s).get('value'));
		var sub = true;
	}

	if (sub == true) {
		$('shopping-cart').submit();
	}

}

var ie4 = false;
if(document.all) { ie4 = true; }
function getObject(id) {
	if (ie4) {
		return document.all[id];
	} else {
		return document.getElementById(id);
	}
}

function toggle_div(link, divId, linktext) {
	var lText = link.innerHTML;
	var d = getObject(divId);
	if (lText.substring(0,1) == '+') {
		link.innerHTML = '&#8722; ' + linktext;
		d.style.display = '';
	} else {
		link.innerHTML = '+ ' + linktext;
		d.style.display = 'none';
	}
}

/*
 * $Log: common.js,v $
 * Revision 1.4  2006/09/14 00:35:51  edward
 * Add function state_check to check bill state in customer registration.
 *
 * Revision 1.3  2006/08/15 04:15:19  edward
 * Mod popup_win function so the window is resizable and remove "return false"
 *
 *
 *
 *
 * Logic Flow (c) 2004 - www.logicflow.com.au
 *
 */