/**
 *	Haier javascript library
 *
 *	Talk to Dave before wading in here please...
 */


/* FOR VIDEO POPUP 
 * Added by Rob June 14th 2007
 */
 
function openNewWindow(URLtoOpen, windowName, windowFeatures) {
	newWindow=window.open(URLtoOpen, windowName, windowFeatures);
}


/* Base JS
 */
 
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;
}


function IsNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;

	for (i = 0; i < sText.length && IsNumber == true; i++)  { 
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}


/**
 *	Slide Up/Down sidenav
 */
function sidenav(id,level) {

	var sidenavid = 'sidenav-' + id;
	var controlid = 'control-' + id;


	if ( document.getElementById(sidenavid).className != "" ) {

		var elements = getElementsByClass('sidenav-lvl0');

		/**
		 *	Close all open level 0 divs first
		 */
		for (i = 0; i < elements.length; i++) {
			if ( document.getElementById(elements[i].id).name == 'open' && elements[i].id != sidenavid) {
				document.getElementById(elements[i].id).name = '';
				new Effect.BlindUp(elements[i].id, {duration: .5});
				//document.getElementById(elements[i].id).style.display = 'none';

				/**
				 *	Change minus symbol to plus for closed level0 category
				 */
				var tempid = elements[i].id.split("-");
				document.getElementById('control-' + tempid[1]).className = 'right-close';

				break;
			}
		}
	}

	if ( document.getElementById(sidenavid).name == 'open' ) {
		document.getElementById(sidenavid).name = '';
		new Effect.BlindUp(sidenavid, {duration: .5});
		//document.getElementById(sidenavid).style.display = 'none';

		$(controlid).className = 'right-close';
	}
	else {
		document.getElementById(sidenavid).name = 'open';
		new Effect.BlindDown(sidenavid, {duration: .5});
		//document.getElementById(sidenavid).style.display = 'block';

		$(controlid).className = 'right-open';
	}

}


/**
 *	Slide Up/Down nav in header
 */
function nav(id) {
	var elements = getElementsByClass('option');
	var close = 0;
	for (i = 0; i < elements.length; i++) {
		if ( document.getElementById(elements[i].id).name == 'open' ) {
			document.getElementById(elements[i].id).name = 'close';
			document.getElementById('dd' + elements[i].id).className = '';
			new Effect.BlindUp('navDrop' + elements[i].id, {duration: .5, queue: 'front'});
			if ( id == elements[i].id ) {
				close = 1;
			}
		}
	}

	if ( document.getElementById(id).name == 'close' && close == 0 ) {
		document.getElementById(id).name = 'open';
		document.getElementById('dd' + id).className = 'active';
		new Effect.BlindDown('navDrop' + id, {duration: .5, queue: 'end'});
	}
}

/**
 *	Open certain divs for certain pages
 */
function opennav(page) {

	// need to rewite this with an object, not just multiple OR's

	if ( page == "category" || page == "product" || page == "compare" ) {
		$('navDropproducts').style.display = "block";
		$('ddproducts').className = 'active';
		$('products').name = "open";
	}
	else if ( page == "support/index" || page == "troubleshooting/index" || page == "support/rlocator" ) {
		$('navDropsupport').style.display = "block";
		$('ddsupport').className = 'active';
		$('support').name = "open";
	}
	else if ( page == "aboutus/index" || page == "aboutus/building" || page == "aboutus/nba" || page == "aboutus/press" ) {
		$('navDropabout').style.display = "block";
		$('ddabout').className = 'active';
		$('about').name = "open";
	}

	return false;
}

/**
 *	Fade In/Out images on product page
 */
function changeimage(id) {
	var elements = getElementsByClass('largeimages');
	var close = 0;


	/**
	 *	Disable other links while the fade is going on
	 *		Stops multiple large images from showing up in the same div
	 */
	for (j = 0; j < elements.length; j++) {
		document.getElementById('thumb_' + elements[j].id).href = "javascript:";
	}


	for (i = 0; i < elements.length; i++) {
		if ( document.getElementById(elements[i].id).style.display != 'none' && id != elements[i].id) {
			var current = i;

			/**
			 *	Get image height for IE and Safari
			 */
			x = new Image;
			x.src=document.getElementById('image_' + id).src;
			height = x.height;

			/**
			 *	Get height for Firefox
			 */
			if ( height == 0 ) {
				height = document.getElementById('image_' + id).height;
			}

			document.getElementById('thumb_' + elements[i].id).className = '';
			new Effect.Fade(elements[i].id, {queue: 'front'});

			/**
			 *	Force div height, stops the flicker
			 */
			if ( height != 0 ) {
				document.getElementById('wholeimage').style.height = height + 'px';
			}

			break;
		}
	}


	/**
	 *	Don't fade image in if we are already on it
	 */
	if ( current != undefined ) {
		if ( id != elements[i].id ) {
			document.getElementById('thumb_' + id).className = 'active';
			new Effect.Appear(id, {queue: 'end'});
		}
	}

	/**
	 *	Re-enable links to images after 1.5 seconds
	 */
	reenable(1500);

}



/**
 *	Re-enable links to images after specific time interval
 */
function reenable( ms ) {
	window.setTimeout( "enablelinks()", ms );
}

function enablelinks() {
	/**
	 *	Enable links again
	 */
	var elements = getElementsByClass('largeimages');
	for (j = 0; j < elements.length; j++) {
		document.getElementById('thumb_' + elements[j].id).href = "javascript:changeimage('" + elements[j].id  + "');";
	}
}


/**
 *	Make sure the users has checked between 2 and 4 models to compare
 */
function numproducts( form ) {

	var checked = 0;
	for (i = 0; i < form.elements.length; i++) {
		if ( form.elements[i].checked == true ) {
			checked++;
		}
	}

	if ( checked < 2 ) {
		alert('You must select at least 2 models to compare');
		return false;
	}
	if ( checked > 4 ) {
		alert('You can only select up to 4 models to compare');
		return false;
	}

	return true;
}


/**
 *	Troubleshooting Categories
 */
function refinetroubleshooting( type ) {

	$('questionstemp').style.display = 'none';
	$('questions').style.display = 'block';	

	//alert(Form.serialize('troubleshootingcategories'));

	//if ( type == "category" ) {
	//	$('sub_category_wrapper').style.display = 'none';
	//	$('sub_category').options.length = 0;
	//	$('sub_sub_category_wrapper').style.display = 'none';
	//	$('sub_sub_category').options.length = 0;
	//	$('models').options.length = 0;
	//}

	if ( type == "sub_category" ) {
		$('sub_sub_category_wrapper').style.display = 'none';
		$('sub_sub_category').options.length = 0;
		$('models_wrapper').style.display = 'none';
		$('models').options.length = 0;
	}

	if ( type == "sub_sub_category" ) {
		$('models_wrapper').style.display = 'none';
		$('models').options.length = 0;
	}


	var postdata = Form.serialize('troubleshootingcategories');


	if ( type != "sub_sub_category" && type != "models" ) {

		var options = {
			method : 'post',
			postBody: postdata,
			onComplete: populatecategories
		};

 		new Ajax.Request('select?type=sub_category', options);
	}

	if ( type != "models" ) {

		var options = {
			method : 'post',
			postBody: postdata,
			onComplete: populatemodels
		};
	
		new Ajax.Request('select?type=model', options);
	}


	/**
	 *	Get Questions
	 */
	$('questions').style.display = 'block';
	$('questionslist').innerHTML = '<img src="/en/gui/ajaxload.gif" />';
	$('questionstext').innerHTML = '';

	new Ajax.Updater('questionslist', '/en/troubleshooting/select?type=question', {asynchronous:true, parameters:Form.serialize('troubleshootingcategories') });

	return false;
}


/**
 *	Populate Select Boxes
 */
function populatecategories(originalRequest) {

	//alert(originalRequest.responseText);

	var data = originalRequest.responseText.split('@');

	var type = data[0];
	var categories = data[1].split(',');

	//$(type).options.length = 0;

	if ( categories.length > 1 ) {

		for (i = 0; i < categories.length; i++) {
			var line = categories[i].split('_');
			$(type).options[i] = new Option(line[1],line[0]);
		}

		$(type + '_wrapper').style.display = 'block';
	}

	return false;
}

/**
 *	Populate Select Boxes
 */
function populatemodels(originalRequest) {

	/**
	 *	Clear models select if no models are found
	 */
	if ( originalRequest.responseText.length == "" ) {
		$('models').options.length = 0;
		$('models_wrapper').style.display = 'none';
		return false;
	}

	$('models').options.length = 0;

	if ( originalRequest.responseText != "" ) {

		var models = originalRequest.responseText.split(',');

		for (i = 0; i < models.length; i++) {
			$('models').options[i] = new Option(models[i],models[i]);
		}

		$('models_wrapper').style.display = 'block';

	}

	return false;
}


/**
 *	Reset Troubleshooting
 */
function resettroubleshooting() {

	$('questionstemp').style.display = 'block';
	$('questions').style.display = 'none';	

	//$('category').selectedindex = '0';
	//document.troubleshootingcategories.category.selectedIndex = 0;
	document.troubleshootingcategories.sub_category.selectedIndex = 0;

	//$('sub_category_wrapper').style.display = 'none';
	$('sub_sub_category_wrapper').style.display = 'none';
	$('models_wrapper').style.display = 'none';

	//$('sub_category').options.length = 0;
	$('sub_sub_category').options.length = 0;

	$('models').options.length = 0;

	$('questions').style.display = 'none';

	return false;
}


/**
 *	Reflect/Mirror images
 */
var Reflector = {
  reflect: function(element) {
    element = $(element);
    options = $H({
      amount: 1/3,
      opacity: 1/3
    }).merge(arguments[1] || {});
    
    var p = element.parentNode, n = element.nextSibling;
    var d = 1.0/(element.height*options.amount);
      
    (element.height*options.amount).times( function(line) {
      var h = Builder.node('div',{style:'height:1px;overflow:hidden'},
        [Builder.node('img',{src:element.src, 
          style:'margin-top:-'+(element.height-line-1)+'px'
        })]);
      p.insertBefore(h,n);
      $(h).setOpacity((1-d*line)*options.opacity);
    });
  }
}
