/* vim:fenc=iso-8859-1:filetype=javascript:ts=4

  $Id: general.js,v 1.3 2003/02/10 22:30:55 hpdl Exp $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2003 osCommerce

  Released under the GNU General Public License
*/

function SetFocus(TargetFormName) {
  var target = 0;
  if (TargetFormName != "") {
    for (i=0; i<document.forms.length; i++) {
      if (document.forms[i].name == TargetFormName) {
        target = i;
        break;
      }
    }
  }

  var TargetForm = document.forms[target];
    
  for (i=0; i<TargetForm.length; i++) {
    if ( (TargetForm.elements[i].type != "image") && (TargetForm.elements[i].type != "hidden") && (TargetForm.elements[i].type != "reset") && (TargetForm.elements[i].type != "submit") ) {
      TargetForm.elements[i].focus();

      if ( (TargetForm.elements[i].type == "text") || (TargetForm.elements[i].type == "password") ) {
        TargetForm.elements[i].select();
      }

      break;
    }
  }
}

function RemoveFormatString(TargetElement, FormatString) {
  if (TargetElement.value == FormatString) {
    TargetElement.value = "";
  }

  TargetElement.select();
}

function CheckDateRange(from, to) {
  if (Date.parse(from.value) <= Date.parse(to.value)) {
    return true;
  } else {
    return false;
  }
}

function IsValidDate(DateToCheck, FormatString, MonthList) {
  var strDateToCheck;
  var strDateToCheckArray;
  var strFormatArray;
  var strFormatString;
  var strDay;
  var strMonth;
  var strYear;
  var intday;
  var intMonth;
  var intYear;
  var intDateSeparatorIdx = -1;
  var intFormatSeparatorIdx = -1;
  var strSeparatorArray = new Array("-"," ","/",".");
  var strMonthArray = MonthList.split(',');
  var intDaysArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

  strDateToCheck = DateToCheck.toLowerCase();
  strFormatString = FormatString.toLowerCase();
  
  if (strDateToCheck.length != strFormatString.length) {
    return false;
  }

  for (i=0; i<strSeparatorArray.length; i++) {
    if (strFormatString.indexOf(strSeparatorArray[i]) != -1) {
      intFormatSeparatorIdx = i;
      break;
    }
  }

  for (i=0; i<strSeparatorArray.length; i++) {
    if (strDateToCheck.indexOf(strSeparatorArray[i]) != -1) {
      intDateSeparatorIdx = i;
      break;
    }
  }

  if (intDateSeparatorIdx != intFormatSeparatorIdx) {
    return false;
  }

  if (intDateSeparatorIdx != -1) {
    strFormatArray = strFormatString.split(strSeparatorArray[intFormatSeparatorIdx]);
    if (strFormatArray.length != 3) {
      return false;
    }

    strDateToCheckArray = strDateToCheck.split(strSeparatorArray[intDateSeparatorIdx]);
    if (strDateToCheckArray.length != 3) {
      return false;
    }

    for (i=0; i<strFormatArray.length; i++) {
      if (strFormatArray[i] == DOB_FORMAT_MM || strFormatArray[i] == DOB_FORMAT_MMM) {
        strMonth = strDateToCheckArray[i];
      }

      if (strFormatArray[i] == DOB_FORMAT_DD) {
        strDay = strDateToCheckArray[i];
      }

      if (strFormatArray[i] == DOB_FORMAT_YYYY) {
        strYear = strDateToCheckArray[i];
      }
    }
  } else {
    if (FormatString.length > 7) {
      if (strFormatString.indexOf(DOB_FORMAT_MMM) == -1) {
        strMonth = strDateToCheck.substring(strFormatString.indexOf(DOB_FORMAT_MM), 2);
      } else {
        strMonth = strDateToCheck.substring(strFormatString.indexOf(DOB_FORMAT_MMM), 3);
      }

      strDay = strDateToCheck.substring(strFormatString.indexOf(DOB_FORMAT_DD), 2);
      strYear = strDateToCheck.substring(strFormatString.indexOf(DOB_FORMAT_YYYY), 2);
    } else {
      return false;
    }
  }

  if (strYear.length != 4) {
    return false;
  }

  intday = parseInt(strDay, 10);
  if (isNaN(intday)) {
    return false;
  }
  if (intday < 1) {
    return false;
  }

  intMonth = parseInt(strMonth, 10);
  if (isNaN(intMonth)) {
    for (i=0; i<strMonthArray.length; i++) {
      if (strMonth == strMonthArray[i]) {
        intMonth = i+1;
        break;
      }
    }
    if (isNaN(intMonth)) {
      return false;
    }
  }
  if (intMonth > 12 || intMonth < 1) {
    return false;
  }

  intYear = parseInt(strYear, 10);
  if (isNaN(intYear)) {
    return false;
  }
  if (IsLeapYear(intYear) == true) {
    intDaysArray[1] = 29;
  }

  if (intday > intDaysArray[intMonth - 1]) {
    return false;
  }
  
  return true;
}

function IsLeapYear(intYear) {
  if (intYear % 100 == 0) {
    if (intYear % 400 == 0) {
      return true;
    }
  } else {
    if ((intYear % 4) == 0) {
      return true;
    }
  }

  return false;
}


function alternate_picture(id_prefix, timeout) {
	var act_id = -1;
	var cur_id = 0;
	var desc_visible = false; /* Make sure to just alternate if description is hidden */
	var mydiv = null;
	var mydesc = null;

	if (document.getElementById(id_prefix+'0')) {
		do {
			mydiv  = document.getElementById(id_prefix+cur_id);
			mydesc = document.getElementById('desc_'+id_prefix+cur_id);
			if (mydesc != null && mydesc.style.display == 'block')
				desc_visible = true;
			if (mydiv == null) {
				break;
			} else if (desc_visible == false) {
				if (mydiv.style.display == 'block' && act_id == -1)
					act_id = cur_id + 1;
				mydiv.style.display = (act_id == cur_id ? 'block' : 'none');
			}
			cur_id++;
		} while (true);

		if ((act_id <= 0 || act_id == cur_id) && desc_visible == false)
			document.getElementById(id_prefix+'0').style.display = 'block';
		window.setTimeout("alternate_picture('"+id_prefix+"', "+timeout+")", timeout);
	}
}

var visibleDesc = null;
var hoveredDesc = null;

function doShowDesc(descid, src_obj, pos) {
	if (hoveredDesc != descid)
		return;
	var desc = document.getElementById(descid);
	if (visibleDesc != null) {
		var desc2 = document.getElementById(visibleDesc);
		if (desc2 != null)
			desc2.style.display = 'none';
		visibleDesc = null;
	}
	if (desc != null) {
		var wl = 0; var wt = 0;
		var  l = 0; var  t = 0;
		var ww = 0;
		var x = src_obj;
		if (navigator.appVersion.match(/^4.0 .compatible; MSIE [3-6]\.[0-9]/)) {
			while (x != null) {
				if (x.id == '') {
					wl += x.offsetLeft;
					wt += x.offsetTop;
				}
				x = x.offsetParent;
			}
		} else
			while (x != null) {
				wl += x.offsetLeft;
				wt += x.offsetTop;
				x = x.offsetParent;
			}
		if (self.innerWidth) {
			ww = self.innerWidth; // all except Explorer
		} else if (document.documentElement && document.documentElement.clientHeight) {
			ww = document.documentElement.clientWidth; // Explorer 6 Strict Mode
		} else if (document.body) {
			ww = document.body.clientWidth; // other Explorers
		}
		visibleDesc = descid;
		hoveredDesc = descid;
		desc.style.display = 'block';
		if (pos == 'l') {
			l = desc.offsetWidth < wl ? wl-desc.offsetWidth : 0;
			t = wt;
		} else if (pos == 'r') {
			l = desc.offsetWidth + wl + src_obj.offsetWidth > ww ? (desc.offsetWidth >= wl ? wl-desc.offsetWidth : 0) : (wl+src_obj.offsetWidth);
			t = wt;
		} else if (pos == 't') {
			t = wt + 1 - desc.offsetHeight;
			l = wl + (src_obj.offsetWidth - desc.offsetWidth) / 2;
		} else if (pos == 'b') {
			t = wt + src_obj.offsetHeight - 1;
			l = wl + (src_obj.offsetWidth - desc.offsetWidth) / 2;
		} else {
			if (wl >= ww / 2) {
				/* try left of first */
				l = desc.offsetWidth >= wl ? -wl : -desc.offsetWidth;
			} else {
				/* try right of first */
				l = desc.offsetWidth + wl + src_obj.offsetWidth > ww ? (desc.offsetWidth >= wl ? -wl : -desc.offsetWidth) : src_obj.offsetWidth;
			}
		}
		desc.style.left       = l+'px';
		desc.style.top        = t+'px';
	}
}

function showDesc(descid, src_obj, pos) {
	hoveredDesc = descid;
	window.setTimeout("doShowDesc('"+descid+"', document.getElementById('"+src_obj.id+"'), '"+pos+"')", 1000);
}

function hideDesc(descid) {
	if (hoveredDesc == descid)
		hoveredDesc = null;
	window.setTimeout("doHideDesc('"+descid+"')", 500);
}

function hoverDesc(descid) {
	if (hoveredDesc == null)
		hoveredDesc = descid;
}

function doHideDesc(descid) {
	var desc = document.getElementById(descid);
	if (desc != null && hoveredDesc != descid) {
		desc.style.display = 'none';
		if (visibleDesc == descid)
			visibleDesc = null;
	}
}
