// v2 KCH 03/10/2001 for web4print
// v1  - tried to use OOP but JS is not exactly OO.. Oh... (Prototype-based OO is not OO!!!!)

var NewWindowAttributes = "toolbar=no, resizable=yes, scrollbars=yes, status=no, dependent=yes, location=no";
var NewDocumentCSS = "<link rel=\"stylesheet\" href=\"/w4p/forms.css\" type=\"text/css\">";
var NewDocumentDOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
//size in pixels (see corresponding CSS)
var cell_x=40;
var cell_y=25;
var table_xpad= cell_x*2;
var table_ypad= cell_y*2+20;
var none_col = " X";
var val_counter=0;
validate_list = new Array();
var oa, ot;

function add_to_validate(id) {
	validate_list[val_counter]=id;
	val_counter++;
	return true;
}

function reset_form_dest(){
        document.cart_quantity.action=oa;
        document.cart_quantity.target=ot;
}

// Andrew added this function for use in popup preview window (see in validate_form function)
function getWinSize() {
	var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  
  return [myWidth, myHeight];
}

function validate_form(mode){
	for(var ai=0; ai < validate_list.length ; ai++){
	  if (document.cart_quantity.elements[validate_list[ai]] != null){
	    if  (document.cart_quantity.elements[validate_list[ai]].value == ""){
		alert("All fields marked with '*' symbol must be filled.");
		return;
	    }
	  }
            
	}

        trimFormElements(document.cart_quantity);
	if (mode == 1){
	    oa = document.cart_quantity.action;
	    ot=document.cart_quantity.target;
	
//Andrew added - to open a blank window and stop from loading in tab in FF and IE7+;  [[ I would like to first close the window if it is open, then open it anew with progress animation -- but unclear how because as soon as attempt to load pdf, window blanked]]

//		if(window.thePopupFrame !== undefined) {
//		thePopupFrame.close();
//		}
		
		var winDim = getWinSize();
		theWidth = parseInt(winDim[0] * .75);
		theHeight = parseInt(winDim[1] * .75);
		theParamString = "width=" + theWidth + ",height=" + theHeight + ",toolbar=0,location=0,menubar=0,resizable=1,directories=0"
//		thePopupFrame = window.open("http://www.google.com","previewframe1","width=500,height=500,toolbar=0,location=0,menubar=0,resizable=1,directories=0");
		thePopupFrame = window.open("http://www.google.com","previewframe1",theParamString);
		if(window.focus) {
			thePopupFrame.focus();
		}
	
    	    document.cart_quantity.action="w4p.php";
    	    document.cart_quantity.target="previewframe1";
	//var pwin = show_progress_win();
	    //show_progress("gears-preview.gif");
    	    document.cart_quantity.submit();
	    setTimeout('reset_form_dest()',2000);
	}else{
		if (mode == 3){
			oa = document.cart_quantity.action;
			ot=document.cart_quantity.target;
			document.cart_quantity.action="w4psession.php?action=save";
			document.cart_quantity.target="previewframe";
			document.cart_quantity.submit();
			setTimeout('reset_form_dest()',2000);

		} else {
			if (document.cart_quantity.artupl){
				document.cart_quantity.submit();
			}else{
			// Andrew commented out for the time being - we might replace at some stage	
			// } else {
			//if (confirm("Have you previewed your  order?")){
				show_progress("gears-final.gif");
				document.cart_quantity.submit();
			//} else {
			//    oa = document.cart_quantity.action;
			//    ot=document.cart_quantity.target;
	    	//    document.cart_quantity.action="w4p.php";
	    	//    document.cart_quantity.target="previewframe1";
	    	//    document.cart_quantity.submit();
			//    setTimeout('reset_form_dest()',2000);
			
			}			
		}
	}
}
	

function  show_progress(img){
    var doc = window.frames.previewframe.document;
    doc.open();
    doc.write(NewDocumentDOCTYPE);
    doc.write("<html>");
    doc.write("<head>");
    doc.write("<title>(progress)</title>");
    doc.write(NewDocumentCSS);
    doc.write("<meta http-equiv='cache-control' content='no-cache'>");
    doc.write("</head><body>");
    doc.write("</head><body onload=\"javascript:document.pbar.src='/images/spacer.gif';\">");
//    doc.write("<p>Loading...data</p>");
    doc.write("<center><img id=\"pbar\" name=\"pbar\" src=\"/"+ img + "\"></center>");
    doc.write("</body>");
    doc.write("</html>");
    doc.close();

    setTimeout('window.frames.previewframe.document.getElementById("pbar").src="'+img+'"',200);

}

function show_img (){
    return ("<a href=\"" + this.handler + "\"><img border=1 src='"+this.n+"' width=" + this.x +" height="+ this.y +"></a>");
}

function show_clr(){
        var expr = "<td ";
	var colname = getColData(this.n, 1);
	var colhex =  getColData(this.n, 2);
        if (this.v != ""){
                expr += "class=\"clickable\"";
        }
        expr += " bgcolor=" + colhex + " title=\"" + colname + "\" onClick=\"" + this.handler + "\">";
	if (colname == "No_Colour"){
                expr += none_col;
	}
        expr += "&nbsp;</td>";
        return expr;
}

function Chooser_Data(control_name, type, data, value, x, y) {
	this.t = type;
	this.o = control_name;
	this.n = data;
	this.v = value;
        this.x = x;
        this.y = y;

    this.handler = "javascript:opener.setValue('" + this.o + "','" +this.t + "','" +this.v+ "');opener.focus();self.close()";

	switch (type) {
		case "p_":
			this.show_html = show_img;
		break;
		case "c_":
			this.show_html = show_clr;
		break;
		default:
			alert("Unknown type : " + type);
	}

}

function getImage(thename,width,height){
  imgs = new Array();
  var count;
  var size, pos;
  var sx, sy;
  {
        sy=screen.height/2;
        sx=screen.width/2;
//        if (width < sx && height < sy ){
            sy = height;
            sx = width;
//        }
        if (width < 200 || height < 200){
            sy = 200;
            sx = 200;
        }
        size = ", width="+ (sx+40) + " ,height="+(sy+10);
  }

  for (var i=0; i< document.cart_quantity.length; i++){
        if (document.cart_quantity.elements[i].name == thename){
                var ctrl = document.cart_quantity.elements[i];
		for (var ii=0; ii < ctrl.length; ii++){
                        imgs[ii] = new Chooser_Data(thename, "p_", ctrl.options[ii].text, ctrl.options[ii].value,width,height);
		}
	}
  }
  count = imgs.length;
  win = window.open("","imageChooser",NewWindowAttributes + size + pos);
  win.document.open();

  win.document.write(NewDocumentDOCTYPE);
  win.document.write("<head>");
  win.document.write("<title>Image Chooser ("+ thename +")</title>");
  win.document.write(NewDocumentCSS);
  win.document.write("</head><body>");

  for (var i=0; i < count; i++){
	win.document.write(imgs[i].show_html());
  }
  win.document.write("</body>");
  win.document.write("</html>");
  win.document.close();
  win.focus();

  return;
}

function getColor(thename){
  clrs = new Array(20);
  var count;
  var size, pos;

  // initialize array
  for (var i=0; i < clrs.length; i++){
	clrs[i] = new Chooser_Data("","c_", "#FFFFFF","");
  }
  for (var i=0; i< document.cart_quantity.length; i++){
        if (document.cart_quantity.elements[i].name == thename){
                var ctrl = document.cart_quantity.elements[i];
		for (var ii=0; ii < ctrl.length; ii++){
                        clrs[ii] = new Chooser_Data(thename, "c_", ctrl.options[ii].text, ctrl.options[ii].value,0,0);
		}
	}
  }
  count = clrs.length;
  {
	var sx, sy;
        sy = cell_y * count/4 + table_ypad; // need extra for window title
        sx = cell_x * count/5 + table_xpad;
	size = ", width="+ sx + " ,height="+sy;
  }
  win = window.open("","colorChooser",NewWindowAttributes + size + pos);
  win.document.open();
  win.document.write(NewDocumentDOCTYPE);
  win.document.write("<html>");
  win.document.write("<head>");
  win.document.write("<title>Color Chooser ("+ thename +")</title>");
  win.document.write(NewDocumentCSS);
  win.document.write("</head><body>");
  win.document.write("<div align='center'><table class='chooser'>");
  for (var row=0; row < 5; row++){
	win.document.write("<tr>");
	for (var col=0; col < 4; col++){
		win.document.write(clrs[row * 4 + col].show_html());
	}
	win.document.write("</tr>");
  }
  win.document.write("</table></div>");
  win.document.write("</body>");
  win.document.write("</html>");
  win.document.close();
  win.focus();

  return;
}

function findOption(array,value){
        for (var i=0; i < array.length; i++){
             if (array[i].value == value)
                       return array[i];
        }
        return 0;
}

function setValue(objname,type,value){
//  if (typeof objname == undefined || objname == null){
//        return 0;
//  }
  for (var i=0; i < document.cart_quantity.length; i++){
        if (document.cart_quantity.elements[i].name == objname) {
                var ctrl = findOption(document.cart_quantity.elements[i].options, value);
		if (ctrl == 0){
			alert("Control not found");
		}
		ctrl.selected = true;
        if (document.getElementById){
            var hf = document.createElement('INPUT');
            hf.name = objname;
            hf.type = "hidden";
            hf.value = value;
            document.cart_quantity.appendChild(hf);
        }
                update(document.cart_quantity.elements[i],type, objname);
		return 1;
	}
  }
  return 0;
}


function update(obj,type,name){
    var ctrl = document.all ? document.all[type + name] : document.getElementById(type + name);
    if (typeof ctrl == "undefined" || ctrl == null) {
		alert("Element " + type+name +" not found");
		return 0;
	}
    if (typeof obj == "undefined" || obj == null) {
		alert("Control element is missing");
		return 0;
	}
	var idx = obj.selectedIndex;
	switch (type) {
		case "p_":
			var opt = obj.options[idx];
			ctrl.src = opt.text;
		break;
		case "c_":
			var colname, colhex;
                  colname = getColData(obj.options[idx].text,1);
                  colhex  = getColData(obj.options[idx].text,2);
			ctrl.bgColor = colhex; //not supported by NS4.x and Opera
			ctrl.title   = colname;
                        if (document.all) {// ie
                            ctrl.innerText    = "\u00A0";
			    if (colname == "No_Colour"){
                                  ctrl.innerText    = none_col;
			    }
                        }else{
			    ctrl.normalize();
                            ctrl.firstChild.nodeValue = "\u00A0"; 
			    if (colname == "No_Colour"){
                                  ctrl.firstChild.nodeValue = none_col;
			    }
                   }

		break;
		default:
			alert("Unknown type : " + type);
		break;
	}
}

function getColData(fmtstr, type){
		var vl = new String("");
		var data = new String(fmtstr);

		var pos = data.indexOf(':');

		if (pos ==0){
			alert("Improperly formatted text : " + data);
			return 0;
		}
		switch (type){
		case 1:
			vl = data.substr(0,pos);
			break;
		case 2:
			vl = data.substr(pos+1);
			break;
		default:
			alert("Unknown type for parsing " + type);
			break;
		}
		return vl;
}

function show_help(urldata){
	
	window.open(urldata,'popup','width=300,height=150,'+ NewWindowAttributes);
	return false;
}

function resync_controls(){
 for (var i = 0; i < document.cart_quantity.elements.length; i++)
    if (document.cart_quantity.elements[i].onchange)
      document.cart_quantity.elements[i].onchange();
}

function limittextlength(txLength,txArea,event){
if (navigator.appName == "Microsoft Internet Explorer"){
      tmp = 0;
}else if (navigator.appName == "Netscape"){
	tmp = event.which;
}else if (navigator.appName == "Mozilla"){
        tmp = event.keyCode;
}
if (tmp == 13) {
     return false;
}
if (txArea.value.length>txLength && txLength > 0){
	alert("This text area is limited to " + txLength + " characters. You currently have " + txArea.value.length +".");
	txArea.value =  txArea.value.substring(0,txLength);
	txArea.focus		
 } 
}

function trimFormElements(myForm){
// courtesy of Lars Ortega
	for (var i=0;i < myForm.elements.length;i++){
		if(myForm[i].type=="text" || myForm[i].type=="hidden" || myForm[i].type=="textarea")
			myForm[i].value=trim(myForm[i].value);
	}
	return true;
}

function trim(str){
	return str.replace(/^\s+|\s+$/gi,"");
}

function fullscreen(){
    var link =  previewframe.document.pdfobj.data;    
    var full = window.open(link,"fullpreview","resizable, scrollbars, status");
}

