var ddhtml = {
  
  ITEM_TYPE_NAME : "drag",
  TARGET_TYPE_NAME : "target",
  ITEM_OPTIONS : CURSOR_HAND + TRANSPARENT,
  TARGET_OPTIONS : NO_DRAG,
  
  IMAGE_TYPES : new Object(),
  NO_ROOM_MSG : "No Room",
  BORDER : 2,
  
  
  
  isItem : function (obj) { return ddhtml.IMAGE_TYPES[obj.name].type == ddhtml.ITEM_TYPE_NAME; },
  isTarget : function (obj) { return ddhtml.IMAGE_TYPES[obj.name] == ddhtml.TARGET_TYPE_NAME; },
  
  defX : function (obj) { return ddhtml.IMAGE_TYPES[obj.name].x; },
  defY : function (obj) { return ddhtml.IMAGE_TYPES[obj.name].y; },
  
  getRealLeft : function (imgElem) {
    xPos = imgElem.offsetLeft;
    tempEl = imgElem.offsetParent;
    while (tempEl != null) {
      xPos += tempEl.offsetLeft;
      tempEl = tempEl.offsetParent;
    }
    return xPos;
  },
  
  getRealTop : function (imgElem) {
    yPos = imgElem.offsetTop;
    tempEl = imgElem.offsetParent;
    while (tempEl != null) {
      yPos += tempEl.offsetTop;
      tempEl = tempEl.offsetParent;
    }
    return yPos;
  },
  
  
  
  sortChildren : function (_myParent) {
    var _myCh = _myParent.children;
    
    _myX = _myParent.x + ddhtml.BORDER;
    _myY = _myParent.y + ddhtml.BORDER;
    var _myHeight = 0;
    var _myWidth = 0;
    
    for (var i = 0; i < _myCh.length; i++) {
      if (_myX + _myCh[i].w > _myParent.x + _myParent.w) {
	_myY += _myHeight + ddhtml.BORDER;
	_myX = _myParent.x + ddhtml.BORDER;
	_myHeight = 0;
      }
      
      if (_myY + _myCh[i].h > _myParent.y + _myParent.h) {
	_myCh[i].parent._removeChild(_myCh[i]);
	_myCh[i].moveTo(ddhtml.defX(_myCh[i]), ddhtml.defY(_myCh[i]));
	break;
      }
      
      _myCh[i].moveTo(_myX, _myY);
      
      _myX += _myCh[i].w + ddhtml.BORDER;
      _myHeight = _myHeight > _myCh[i].h ? _myHeight : _myCh[i].h;
    }
  },
  
  removeChild : function (_myParent, _myChild) {
    if (_myParent == null) return;
    
    _myParent.detachChild(_myChild); 
    _myParent._removeChild(_myChild, 1);
    ddhtml.sortChildren(_myParent);
  },
  
  putChild : function (_myParent, _myChild) {
    if (!ddhtml.isTarget(_myParent) || !ddhtml.isItem(_myChild)) {
      alert("Function putChild(): Incorrect parameters given"); 
      return; 
    }
    
    if (_myChild.parent != null) {
      ddhtml.removeChild(_myChild.parent, _myChild);
    }
    _myParent.addChild(_myChild);
    ddhtml.sortChildren(_myParent);
  },
  
  my_PickFunc : function () {
    if (dd.obj.id.indexOf('myRuler') != -1) {
      return;
    }
    
    var _myEl = document.getElementById(dd.obj.name + "_up");
    if (_myEl) {
      var _mySrc = _myEl.src;
      dd.obj.swapImage(_mySrc);
    }
  },
  
  my_DropFunc : function () {
    if (dd.obj.id.indexOf('myRuler') != -1) {
      return;
    }
    
    dd.obj.swapImage(dd.obj.defsrc);
    
    if (!ddhtml.isItem(dd.obj)) return;
    
    var _myDrop = dd.obj.getEltBelow();
    if (_myDrop != null) {
      
      var _myParent = ddhtml.isTarget(_myDrop) == true ? _myDrop : _myDrop.parent;
      
      if (_myParent == null) {
	if (dd.obj.parent != null) {
	  ddhtml.removeChild(dd.obj.parent, dd.obj);
	}
	dd.obj.moveTo(ddhtml.defX(dd.obj), ddhtml.defY(dd.obj));
      } else {
	ddhtml.putChild(_myParent, dd.obj);
      }
    } else {
      if (dd.obj.parent != null) {
	ddhtml.removeChild(dd.obj.parent, dd.obj);
      }
      dd.obj.moveTo(ddhtml.defX(dd.obj), ddhtml.defY(dd.obj));
    }
  },
  
  getValue : function () {
    var result = {}, i;
    
    for (i = 0; i < dd.elements.length; i++) {
      if (ddhtml.isTarget(dd.elements[i])) {
	var ch = dd.elements[i].children, names = [];
	
	if (ch.length > 0) {
	  for (var j = 0; j < ch.length; j++) 
	    names.push(ch[j].name);
	  
	  result[dd.elements[i].name] = names;
	}
      }
    }
    
    return result;
  },
  
  resetAll : function () {
    for (var i = 0; i < dd.elements.length; i++) {
      try {		
	if (ddhtml.isItem(dd.elements[i])) {
	  ddhtml.removeChild(dd.elements[i].parent, dd.elements[i]);
	  dd.elements[i].moveTo(ddhtml.defX(dd.elements[i]), ddhtml.defY(dd.elements[i]));
	}
      } catch (e) {
	
      }
    }
  },
  
  setValue : function (_myValue)
  {
    ddhtml.resetAll();
    
    
    for (var i in _myValue) {
      var _myArr = _myValue[i];
      for (var j in _myArr) {
	if (!dd.elements[_myArr[j]]) {
	  continue;
	}
	
	ddhtml.putChild(dd.elements[i], dd.elements[_myArr[j]]);
      }
    }
  }
};

function my_PickFunc() {
  return ddhtml.my_PickFunc();
};

function my_DropFunc(){
  return ddhtml.my_DropFunc();
};

function makeDHTML() {
  var _myImages = document.images;
  var _myArg = new Array();
  
  dd.elements = [];
  
  var str = "";
  for (var i = 0; i < _myImages.length; i++) {
    switch (_myImages[i].id) {
      case ddhtml.ITEM_TYPE_NAME:
		_myArg.push(_myImages[i].name + ddhtml.ITEM_OPTIONS );
		var _myProp = new Object();
		
		ddhtml.IMAGE_TYPES[_myImages[i].name] = {
			type: ddhtml.ITEM_TYPE_NAME,
			x: ddhtml.getRealLeft(_myImages[i]),
			y: ddhtml.getRealTop(_myImages[i])
		};
		
		if (_myImages[i].complete) {
		  _myProp["x"] =   ddhtml.getRealLeft(_myImages[i]);
		  _myProp["y"] =   ddhtml.getRealTop(_myImages[i]);
		  _myProp["type"] = ddhtml.ITEM_TYPE_NAME;
		  ddhtml.IMAGE_TYPES[_myImages[i].name] = _myProp;
		} else {
		  $(_myImages[i]).load(function() {
		    ddhtml.IMAGE_TYPES[this.name] = {
		      type: ddhtml.ITEM_TYPE_NAME,
		      y: ddhtml.getRealTop(this),
		      x: ddhtml.getRealLeft(this)
		    };
		  });
		}
	
	break;
      case ddhtml.TARGET_TYPE_NAME:
	_myArg.push(_myImages[i].name +  ddhtml.TARGET_OPTIONS );
	ddhtml.IMAGE_TYPES[_myImages[i].name] = ddhtml.TARGET_TYPE_NAME;
	break;
      default:
	continue;
    }
  }
  
  var _myEval = "SET_DHTML(\"" + _myArg.join("\",\"") + "\");"
  //alert(_myEval);
  
  eval(_myEval);
    
//  if (isiPhone()) {
//	  setTimeout(function() {
//		  for (var i = 0; i < dd.elements.length; i++) {
//	    	  if (ddhtml.isItem(dd.elements[i])) {
//	    		  //alert(dd.elements[i].id);
//	    		  $('#'+dd.elements[i].id).addTouch();
//	    	  }
//	      }
//		  alert('inited');
//	  }, 10000);
//  }
  
}


$(document).ready(function() {
	if (!isiPhone())
		return;
	
//	$('div.question .qfoil img, div.question qfoil div').live('touchstart touchmove touchend touchcancel',function(){
//		//we pass the original event object because the jQuery event
//        //object is normalized to w3c specs and does not provide the TouchList
//		//handleTouch(event);
//		alert('handling');
//	});
//	alert('inited');
});

