function checkSearchIsValid() {
	var text = document.getElementById('searchtext').value;
	if(text != 'Search website' && text != '') {
		return true;
	}
	else {
		alert('No search text entered');
		return false;
	}
}

function showDiv(id, check){
	if(blank(check) || check === false){
		var	div = document.getElementById(id);
		div.style.display = 'block';
	}else if(check===true){
		try{
			var	div = document.getElementById(id);
			div.style.display = 'block';
		}catch(e){			
			
		}		
	}
	return true;
}

function hideDiv(id, check){
	if(blank(check) || check === false){
		var	div = document.getElementById(id);
		div.style.display = 'none';
	}else if(check===true){
		try{
			var	div = document.getElementById(id);
			div.style.display = 'none';
		}catch(e){			
			
		}		
	}	
	return true;
}

function toggleDiv(id){
	var	div = document.getElementById(id);
	if(div.style.display == 'block'){
		hideDiv(id);	
	}else{
		showDiv(id);	
	}
	return true;
}

function getEl(id, check){
	if(check !== false && check !== true){
		check = true;
	}
	var ret = '';
	if(document.getElementById(id)){
		ret = document.getElementById(id);
	}else{
		if(check){
			alert('function getEl failed to find element with id of '+id);
		}
	}
	return ret;
}

function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

/*
	Need to have this creation function because IE is difficult. No one likes you IE.
*/
function createIEElement(type, atts_names, atts_values) {
  var element = null;
  if(blank(atts_names)){
  	atts_names = new Array( );
  }
  if(blank(atts_values)){
  	atts_values = new Array( );
  }
  // Try the IE way; this fails on standards-compliant browsers
  try {
	 var el = '<'+type+' ';
	 for(i = 0; i<atts_names.length; i++){
		 el += atts_names[i]+'="'+atts_values[i]+'" ';
	 }
	 el += '/>';
    element = document.createElement(el);
  } catch (e) {
  	//do nothing
  }
  
  if (!element || element.nodeName != type.toUpperCase()) {
    // Non-IE browser; use canonical method to create named element
    element = document.createElement(type);
	for(i = 0; i<atts_names.length; i++){
    	element.setAttribute(atts_names[i], atts_values[i]);
	}
  }
 
  element.addText = function(text_in){
  	var nn = document.createTextNode(text_in);
  	this.appendChild(nn);
  };
  
  return element;
}


/*****************************************************
Function: add/remove elements from the document
******************************************************/

function removeElement(parentID,elementID){
	var parent = document.getElementById(parentID);
	var child = document.getElementById(elementID);

	parent.removeChild(child);
}
function addElement(parentID,elementID,elementType){
	var newElement = document.createElement(elementType);
	newElement.setAttribute('id',elementID);
	var parent = document.getElementById(parentID);
	
	parent.appendChild(newElement);
}

function addElementTop(parentID,elementID,elementType,content){
	var newElement = document.createElement(elementType);
	newElement.setAttribute('id',elementID);
	var parent = document.getElementById(parentID);
	
	var list = parent.getElementsByTagName("div");
	
	if(list.length ==0){
		parent.appendChild(newElement);
	}else{	
		parent.insertBefore(newElement,list[0]);
	}
	
	newElement.innerHTML = content;	
}

function setElementAttribute(id,stype,text){
	var element = document.getElementById(id);
	
	element.setAttribute(stype,text);
}
/*****************************************************
Function: confirm delete
******************************************************/
function confirmDelete(delUrl) {
  if (confirm("Are you sure you want to delete?")) {
    document.location = delUrl;
  }
}

/*
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;
   
   }
   */
   
function isNumeric(value) {
  if (value == null || !value.toString().match(/^[-]?\d*\.?\d*$/)) return false;
  return true;
}
  

function isArray(obj) {
//returns true is it is an array
if (obj.constructor.toString().indexOf("Array") == -1)
return false;
else
return true;
}


/*****************************************************
Function: validate form
******************************************************/
function validateForm(formName) {
	var error = new Array ();
	var count = 0;
	var temp;
	if(temp = getEl('first_name')){
		if(blank(temp.value)){
			error[count++] = 'First name is blank';
		}
		/*else if(!isAlpha(temp.value)){
			error[count++] = 'First name is not valid';
		}*/
	}
	
	if(temp = getEl('last_name')){
		if(blank(temp.value)){
			error[count++] = 'Surname is blank';
		}
		/*else if(!isAlpha(temp.value)){
			error[count++] = 'Surname is not valid';
		}*/
	}
	
	if(temp = getEl('email')){
		if(blank(temp.value)){
			error[count++] = 'Email is blank';
		}else if(!CheckEmail('email')){
			error[count++] = 'Email is not valid';
		}	
	}
	
	if(temp = document.getElementById('street_01')){
		if(blank(temp.value)){
			error[count++] = 'Street Line 1 is blank';
		}
	}
	
	/*if(temp = getEl('street_02')){
		if(blank(temp.value)){
			error[count++] = 'Street Line 2 is blank';
		}
	}*/
	
	if(temp = document.getElementById('suburb')){
		if(blank(temp.value)){
			error[count++] = 'State/Province/Region is blank';
		}
	}
	
	if(temp = document.getElementById('postcode')){
		if(blank(temp.value)){
			error[count++] = 'Postal/ZIP Code is blank';
		}
		/*else if(!isNumeric(temp.value)){
			error[count++] = 'Postal/ZIP Code is not valid';
		}*/
		}
	
	if(temp = document.getElementById('country')){
		if(blank(temp.value)){
			error[count++] = 'Country is blank';
		}
	}

	if(document.getElementById('about_us_drop').value == '18' && document.getElementById('about_us_text').value == '') {
			error[count++] = 'Please let us know how you heard about us';
	}
	
	if(getEl('member').checked && !getEl('terms_agree').checked) {
			error[count++] = 'You must agree to Kirra Holidays terms and conditions to become a memeber.';
	}
	/*	
	if(formName == 'ContactUs') {
		if(document.getElementById('first_name').value == '') {
			alert('Please enter your first name.');
			return false;
		}
		if(document.getElementById('last_name').value == '') {
			alert('Please enter your surname.');
			return false;
		}
		if(!CheckEmail('email')) {
			return false;
		}
		if(document.getElementById('about_us_drop').value == '1039-18' && document.getElementById('about_us_text').value == '') {
			alert('Please let us know how you heard about us.');
			return false;
		}
		*/
	if(error.length > 0){
		var content = createIEElement('div');
		var title = createIEElement('strong');
		title.addText('The following errors have been found;');
		content.appendChild(title);
		
		var list = createIEElement('ul');
		var li;
		for(iii=0; iii<error.length; iii++){
			//alert('iii = '+iii+' error = '+error[iii]);
			if(isset(error[iii])){
				li = createIEElement('li');
				li.addText(error[iii]);
				list.appendChild(li);
			}
		}
		
		content.appendChild(list);
		content.addText('Please amend errors and try again');
		showDialog(content, true, true);
		return false;
	}else{	
		return true;
	}
}

var search_clear = false;

/*****************************************************
Function: redirect to page
*****************************************************/
function redirect(page){
	if(page) document.location.href = page;	
}
/*****************************************************
Function: check value agains regular expression
******************************************************/
function checkRegExpress(reg,id,format){
	var element = document.getElementById(id);
	
	if(!element.value.match(reg)){
		showError(format);
		return false;
	}else{
		return true;	
	}
}

/*****************************************************
Function: show/hide div
******************************************************/
function showHideElement(element,bstate){ //state: true = show ; false = hide
	var div = document.getElementById(element);
	
	if(bstate){
		div.style.display = 'block';
	}else{
		div.style.display = 'none';
	}
}

function showHideElementAuto(element){ //state: true = show ; false = hide
	var div = document.getElementById(element);
	
	if(div.style.display == 'none'){
		div.style.display = 'block';
	}else{
		div.style.display = 'none';
	}
}

function fadeDiv(divID){
	new Effect.Opacity(divID, { from: 1.0, to: 0, duration: 0.5 });	
}

/*****************************************************
Function: page information
******************************************************/
if(document.all) { 
	document.onmousemove = UpdateCursorPositionDocAll; 
}else {
	document.onmousemove = UpdateCursorPosition; 
}

var cX = 0; var cY = 0;

function UpdateCursorPosition(e){
	cX = e.pageX; 
	cY = e.pageY;
}
function UpdateCursorPositionDocAll(e){
	cX = event.clientX; 
	cY = event.clientY;
}


function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}
function getPageScroll(){

	var xScroll, yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}

	arrayPageScroll = new Array(xScroll,yScroll) 
	return arrayPageScroll;
}

/*****************************************************
Function: check to see if an element is in an array
******************************************************/
function inArray(arr,value){
	var found = false;
	
	for(x in arr){
		if(arr[x] == value){
			found = true;
			break;
		}
	}
	
	return found;
}

/*****************************************************
Function: get vars from URL
******************************************************/
function getURLHash() {
	var q = document.location.hash;
	if(q) {
		alert(q.substring(1,q.length));
	}
	return "";
}

function go(url,w,h) {
	var dim = eval('"width=' + w + ',height=' + h + ',toolbar=0, location=0,directories=0,status=0, menubar=0,scrollbars=0,resizable=0"');
	Npop = window.open(url,"instruct",dim);
	Npop.moveTo(0,0);
	oldWin = Npop.opener;
}

function goScroll(url,w,h) {
	var dim = eval('"width=' + w + ',height=' + h + ',toolbar=0, location=0,directories=0,status=0, menubar=0,scrollbars=1,resizable=0"');
	Npop = window.open(url,"instruct",dim);
	oldWin = Npop.opener;
}

function goEverything(url,w,h) {
	var dim = eval('"width=' + w + ',height=' + h + ',toolbar=1, location=1,directories=1,status=1, menubar=1,scrollbars=1,resizable=1"');
	Npop = window.open(url,"instruct",dim);
	oldWin = Npop.opener;
}

function CheckEmail(sEmail){
	str = document.getElementById(sEmail).value;
	var Errors = false;
	var Emailerrors = false;
	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if(str == ""){
		Emailerrors = true;	
	}
	if (str.indexOf(at)==-1){
	  Emailerrors = true;
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   Emailerrors = true;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		Emailerrors = true;
	}

	 if (str.indexOf(at,(lat+1))!=-1){
		Emailerrors = true;
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		Emailerrors = true;
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
		Emailerrors = true;
	 }
	
	 if (str.indexOf(" ")!=-1){
		Emailerrors = true;
	 }
	 if(Emailerrors){
		//alert("Sorry, your email address is invalid!");
		return false;
	 }else{
		return true;	 
	 }
}

function blank(value){
	var ret = false;
	if(value == null){
		ret = true;
	}else if(value == ''){
		ret = true;	
	}
	return ret;
}

function isset(  ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FremyCompany
    // +   improved by: Onno Marsman
    // *     example 1: isset( undefined, true);
    // *     returns 1: false
    // *     example 2: isset( 'Kevin van Zonneveld' );
    // *     returns 2: true
    
    var a=arguments; var l=a.length; var i=0;
    
    if (l==0) { 
        throw new Error('Empty isset'); 
    }
    
    while (i!=l) {
        if (typeof(a[i])=='undefined' || a[i]===null) { 
            return false; 
        } else { 
            i++; 
        }
    }
    return true;
}

//get current dimensions and position of an element
//usage:   var dims = new ElementDimensions(elementToMeasure);
function ElementDimensions(elem)
{
	this.inner = {	//content and padding; gives 0 for inline elements (you can use scrollWidth/Height if it's inline)
		width: elem.clientWidth,
		height: elem.clientHeight
	};
	this.outer = {	//everything (content, padding, scrollbar, border)
		width: elem.offsetWidth,
		height: elem.offsetHeight
	};
	this.scroll = {
		//width & height of entire content field (including padding), visible or not
		//incorrect in Opera; it doesn't include the padding
		width: elem.scrollWidth,
		//if there are no scrollbars, IE gives the actual height of the content instead of the height of the element
		height: elem.scrollHeight<elem.clientHeight ? elem.clientHeight : elem.scrollHeight,
		
		//scroll position of content & padding
		left: elem.scrollLeft,
		top: elem.scrollTop
	};
	
	//position of element from the top-left corner of the document
	var tmp = elem;
	this.left = this.top = 0;
	while(tmp.offsetParent)
	{
		this.left += tmp.offsetLeft;
		this.top += tmp.offsetTop;
		tmp = tmp.offsetParent;
	}
}

function array_merge() {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Nate
    // -    depends on: is_int
    // %          note: Relies on is_int because !isNaN accepts floats     
    // *     example 1: arr1 = {"color": "red", 0: 2, 1: 4}
    // *     example 1: arr2 = {0: "a", 1: "b", "color": "green", "shape": "trapezoid", 2: 4}
    // *     example 1: array_merge(arr1, arr2)
    // *     returns 1: {"color": "green", 0: 2, 1: 4, 2: "a", 3: "b", "shape": "trapezoid", 4: 4}
    // *     example 2: arr1 = []
    // *     example 2: arr2 = {1: "data"}
    // *     example 2: array_merge(arr1, arr2)
    // *     returns 2: {1: "data"}
    
    var args = Array.prototype.slice.call(arguments);
    var retObj = {}, k, j = 0, i = 0;
    var retArr;
    
    for (i=0, retArr=true; i < args.length; i++) {
        if (!(args[i] instanceof Array)) {
            retArr=false;
            break;
        }
    }
    
    if (retArr) {
        return args;
    }
    var ct = 0;
    
    for (i=0, ct=0; i < args.length; i++) {
        if (args[i] instanceof Array) {
            for (j=0; j < args[i].length; j++) {
                retObj[ct++] = args[i][j];
            }
        } else {
            for (k in args[i]) {
                if (this.is_int(k)) {
                    retObj[ct++] = args[i][k];
                } else {
                    retObj[k] = args[i][k];
                }
            }
        }
    }
    
    return retObj;
}

function is_int( mixed_var ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Alex
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    revised by: Matt Bradley
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %        note 1: 1.0 is simplified to 1 before it can be accessed by the function, this makes
    // %        note 1: it different from the PHP implementation. We can't fix this unfortunately.
    // *     example 1: is_int(23)
    // *     returns 1: true
    // *     example 2: is_int('23')
    // *     returns 2: false
    // *     example 3: is_int(23.5)
    // *     returns 3: false
    // *     example 4: is_int(true)
    // *     returns 4: false
 
    if (typeof mixed_var !== 'number') {
        return false;
    }
 
    if (parseFloat(mixed_var) != parseInt(mixed_var, 10)) {
        return false;
    }
    
    return true;
}

function dickyBrowser( ){
	ret = false;
	if(BrowserDetect.browser == 'Explorer' && Number(BrowserDetect.version) < 7){
		ret = true;					
	}
	return ret;
}

function isAlpha(checkString) {
        var tempString="";
        var regExp = /^[A-Za-z]$/;
        if(checkString != null && checkString != "")
        {
          for(var i = 0; i < checkString.length; i++)
          { 
            if (!checkString.charAt(i).match(regExp))
            {
              return false;
            }
          }
        }
        else
        {
          return false;
        }
     return true;
}

function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     //anchor.target = "_blank";
     //anchor.onClick="goEverything('"+anchor.getAttribute("href")+"');";    
     //anchor.onclick = new goEverything(anchor.getAttribute("href"));
    //. anchor.setAttribute('onclick', "goEverything('"+anchor.getAttribute("href")+"');");
    anchor.setAttribute('onclick', "window.open(this.href); return false;");
     //anchor.href = null;
 }
}
if (typeof jQuery == 'undefined') {  
    // jQuery is not loaded  
} else {
    $(document).ready(function() {
		window.onload = externalLinks;
	});
}




function headerCollapse(id, type){
	var im;
	var table;
	var looping = true;
	var ret = false;
	var count = 0;
	if(blank(type)){
		type = 'toggle';
	}
	if(id == 'open_all'){
		while(looping){
			looping = headerCollapse(count, 'open'); //when it returns false it will assume that the elements was nto found
			count++;
		}
		ret = true;
	}else if(id == 'close_all'){
		while(looping){
			looping = headerCollapse(count, 'close'); //when it returns false it will assume that the elements was nto found
			count++;
		}
		ret = true;
	}else{	
		try{
			//these throw alerts
			//im = getEl('header_arrow_'+id); 
			//table = getEl('header_table_'+id);
			
			im = document.getElementById('header_arrow_'+id);
			table = document.getElementById('header_table_'+id);
		
			//if(im.src == "./images/header_arrow.gif"){
			if((type == 'toggle' && im.src.indexOf("/images/header_arrow.gif") > -1) || type == 'close'){
				im.src = "./images/header_arrow_down.gif";
				table.style.display = 'none';
			}else if((type == 'toggle' && im.src.indexOf("/images/header_arrow_down.gif") > -1) || type == 'open'){
				im.src = "./images/header_arrow.gif";
				//showDiv('table_'+id);
				table.style.display = 'block';				
			}
			ret = true;
		}catch(e){
			ret = false;// something when wrong. Assuming an element was not found.
		}
	}
	
	return ret;		
}


function S4() {
   return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function getGuid() {
   return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

function showTab(div_id){
	var count = 0;
	while(document.getElementById('tab_'+count+'_main')){
		hideDiv('tab_'+count+'_main');
		document.getElementById('tab_'+count).className = 'product-tab';
		count++;
	}
	showDiv(div_id+'_main');
	var div = document.getElementById(div_id);
	div.className = 'product-tab-on';
}

function getElementsByRel(rel){
    aElements = document.getElementsByTagName("a");
    relElems = [];
    for (i = 0; i < aElements.length; i++) {
        if (aElements[i].hasAttribute("rel") && aElements[i].rel == rel) {
            relElems.append(aElements[i]);
        }
    }
	return relElems;
}

function __GET(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function nl2br (str, is_xhtml) {
    // Converts newlines to HTML line breaks  
    // 
    // version: 911.1619
    // discuss at: http://phpjs.org/functions/nl2br
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Philip Peterson
    // +   improved by: Onno Marsman
    // +   improved by: Atli Þór
    // +   bugfixed by: Onno Marsman
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Maximusya
    // *     example 1: nl2br('Kevin\nvan\nZonneveld');
    // *     returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
    // *     example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
    // *     returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
    // *     example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
    // *     returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'
    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';

    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}




